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之使用Python操作数据库(1)
Nov 25 Python
Django中的Signal代码详解
Feb 05 Python
浅析Python pandas模块输出每行中间省略号问题
Jul 03 Python
对python制作自己的数据集实例讲解
Dec 12 Python
对Python中实现两个数的值交换的集中方法详解
Jan 11 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
Jan 29 Python
python3使用matplotlib绘制散点图
Mar 19 Python
Python 使用 docopt 解析json参数文件过程讲解
Aug 13 Python
Django中create和save方法的不同
Aug 13 Python
python实现简易淘宝购物
Nov 22 Python
TensorFlow实现checkpoint文件转换为pb文件
Feb 10 Python
基于python的docx模块处理word和WPS的docx格式文件方式
Feb 13 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警告Creating default object from empty value 问题的解决方法
2014/04/02 PHP
php数组使用规则分析
2015/02/27 PHP
apache和PHP如何整合在一起
2015/10/12 PHP
使用php实现从身份证中提取生日
2016/05/09 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
PHP strripos函数用法总结
2019/02/11 PHP
laravel 使用auth编写登录的方法
2019/09/30 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
IE JS编程需注意的内存释放问题
2009/06/23 Javascript
JavaScript高级程序设计 XML、Ajax 学习笔记
2011/09/10 Javascript
js简易namespace管理器 实例代码
2013/06/21 Javascript
javascript删除元素节点removeChild()用法实例
2015/05/26 Javascript
浅谈Jquery核心函数
2015/06/18 Javascript
JS+CSS实现美化的下拉列表框效果
2015/08/11 Javascript
jquery+CSS3实现淘宝移动网页菜单效果
2015/08/31 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
很棒的js选项卡切换效果
2016/07/15 Javascript
js实现无缝滚动图
2017/02/22 Javascript
Angular.js前台传list数组由后台spring MVC接收数组示例代码
2017/07/31 Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
2017/08/16 Javascript
微信小程序 获取session_key和openid的实例
2017/08/17 Javascript
微信小程序图片选择区域裁剪实现方法
2017/12/02 Javascript
JS改变页面颜色源码分享
2018/02/24 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
2018/03/02 Javascript
JS使用setInterval实现的简单计时器功能示例
2018/04/19 Javascript
vue使用自定义icon图标的方法
2018/05/14 Javascript
React Hooks的深入理解与使用
2018/11/12 Javascript
vue Treeselect下拉树只能选择第N级元素实现代码
2020/08/31 Javascript
Python编程scoketServer实现多线程同步实例代码
2018/01/29 Python
Django中在xadmin中集成DjangoUeditor过程详解
2019/07/24 Python
Python argparse模块应用实例解析
2019/11/15 Python
Python中itertools的用法详解
2020/02/07 Python
利用Bootstrap实现漂亮简洁的CSS3价格表实例源码
2017/03/02 HTML / CSS
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
党员自我评议个人对照检查材料
2014/09/16 职场文书
工商局调档介绍信
2015/10/22 职场文书