python实现冒泡排序算法的两种方法


Posted in Python onMarch 10, 2018

什么是冒泡排序?

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。

它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名冒泡排序。

以上是百度词条对冒泡排序的官方解释。

但是我要说一下我的个人理解,我觉得冒泡排序的核心思想是:每次比较两个数,如果他们顺序错误(大于或者小于),那么就把他们置换。

例如:如果要将五个无序的数字做升序排列(也就是从小到大排列),那么利用冒泡排序如何实现呢?

  1. 首先,比较第一个数和第二个数的大小,由于是从小到大排列,所以如果第一个数大于第二个数,则将这两个数互换位置,反之则不变。
  2. 然后进行第二个数和第三个数比较,同上。
  3. 这样依次比较一轮后,你会发现,总共比了4次,也就是说,如果有n个数进行比较,那么需要n-1次才能完成。
  4. 上面过程主要完成了一轮比较,最终确定了一个最大的数,并且排在5个数的最后,也就是第五个数。
  5. 那么也就意味着需要在进行第一个数到第四个数的一轮比较,确定最大值。
  6. 接着从第一个数到第三个数......
  7. 这样规律就很明显了,五个数需要比较四轮,就能将5个数升序排列,所以n个数需要比较n-1轮。

以上就是冒泡排序的实现思路,接下来看代码!

如何实现?

到底该怎么实现呢?看了上面的分析,我相信你也能编出来吧!

看下我用python编的吧:

方法一:常规实现冒泡排序

# 方法1
# 定义一个列表,用于存放数字
list = []
while True:
  # 自定义输入数字个数
  print('你想排列几个数?')
  try:
    num = int(input())
    for i in range(num):
      a = int(input('请输入第' + str((i+1)) + '个整数:'))
      list.append(a)
  except ValueError:
    print('输入有误!')
  
  # 冒泡排序核心代码,
  for j in range(len(list)-1):
    for k in range(len(list)-1):
      if list[k] < list[k+1]:
        t = list[k]
        list[k] = list[k+1]
        list[k+1] = t

  print(list)

算法的优劣主要看它的时间复杂度,冒泡排序的时间复杂度为:O(N^2)

可以看出,冒泡排序的时间复杂度偏高,所以它还不是最优算法!

方法二:利用sorted()方法快速实现排序

# 定义一个列表对象存数字
list = []
print('你想排列几个数?')
try:
  num = int(input())
  for i in range(num):
    a = int(input('请输入第' + str((i + 1)) + '个整数:'))
    list.append(a)
except ValueError:
  print('输入有误!')

# 利用sorted()方法排序,并使用reverse字段实现降序
print(sorted(list, reverse=True))

非常推荐这种利用sorted()方法实现排序的方法,因为简单嘛!python就是以简洁为名,越少的代码实现相同的功能,何乐而不为!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python连接mysql调用存储过程示例
Mar 05 Python
python处理大数字的方法
May 27 Python
CentOS中使用virtualenv搭建python3环境
Jun 08 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
Mar 20 Python
python使用PIL给图片添加文字生成海报示例
Aug 17 Python
python使用PIL实现多张图片垂直合并
Jan 15 Python
Python实现爬取马云的微博功能示例
Feb 16 Python
python实现弹窗祝福效果
Apr 07 Python
Python编程快速上手——PDF文件操作案例分析
Feb 28 Python
matlab中二维插值函数interp2的使用详解
Apr 22 Python
基于python实现获取网页图片过程解析
May 11 Python
详解python的内存分配机制
May 10 Python
Python使用pyh生成HTML文档的方法示例
Mar 10 #Python
tensorflow获取变量维度信息
Mar 10 #Python
TensorFlow变量管理详解
Mar 10 #Python
TensorFlow神经网络优化策略学习
Mar 09 #Python
TensorFlow实现AutoEncoder自编码器
Mar 09 #Python
TensorFlow实现MLP多层感知机模型
Mar 09 #Python
TensorFlow实现Softmax回归模型
Mar 09 #Python
You might like
用Php实现链结人气统计
2006/10/09 PHP
PHP cron中的批处理
2008/09/16 PHP
PHP基于curl模拟post提交json数据示例
2018/06/22 PHP
用javascript获取地址栏参数
2006/12/22 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
关于scrollLeft,scrollTop的浏览器兼容性测试
2013/03/19 Javascript
原生js操作checkbox用document.getElementById实现
2013/10/12 Javascript
jQuery 事件的命名空间简单了解
2013/11/22 Javascript
简单的js图片轮换代码(js图片轮播)
2014/05/06 Javascript
jQuery.extend 函数及用法详细
2015/09/06 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
Kotlin学习第一步 kotlin语法特性
2017/05/25 Javascript
vue.js实现点击后动态添加class及删除同级class的实现代码
2018/04/04 Javascript
Vue-cropper 图片裁剪的基本原理及思路讲解
2018/04/17 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
2018/10/30 Javascript
微信小程序左滑删除功能开发案例详解
2018/11/12 Javascript
从组件封装看Vue的作用域插槽的实现
2019/02/12 Javascript
vue中音频wavesurfer.js的使用方法
2020/02/20 Vue.js
vue 实现用户登录方式的切换功能
2020/04/14 Javascript
JS eval代码快速解密实例解析
2020/04/23 Javascript
[01:52]深扒TI7聊天轮盘语音出处7
2017/05/11 DOTA
python使用opencv按一定间隔截取视频帧
2018/03/06 Python
Python入门必须知道的11个知识点
2018/03/21 Python
Python实现的求解最小公倍数算法示例
2018/05/03 Python
Python tkinter的grid布局及Text动态显示方法
2018/10/11 Python
Python字符串格式化输出代码实例
2019/11/22 Python
CSS3实现歌词进度文字颜色填充变化动态效果的思路详解
2020/06/02 HTML / CSS
销售人员个人求职信
2013/09/26 职场文书
社会实践感言
2014/01/25 职场文书
大专会计自我鉴定
2014/02/06 职场文书
2014年小学重阳节活动策划方案
2014/09/16 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
2015年试用期工作总结范文
2015/05/28 职场文书
丧事答谢词大全
2015/09/30 职场文书
建筑工程挂靠协议书
2016/03/23 职场文书
Java 异步任务计算FutureTask
2022/04/28 Java/Android