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解析xml文件操作实例
Oct 05 Python
Python进行数据科学工作的简单入门教程
Apr 01 Python
Python基于smtplib实现异步发送邮件服务
May 28 Python
Pycharm 创建 Django admin 用户名和密码的实例
May 30 Python
python八皇后问题的解决方法
Sep 27 Python
Python输出\u编码将其转换成中文的实例
Dec 15 Python
python如何读取bin文件并下发串口
Jul 05 Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
Jan 14 Python
Python TKinter如何自动关闭主窗口
Feb 26 Python
协程Python 中实现多任务耗资源最小的方式
Oct 19 Python
OpenCV-Python实现怀旧滤镜与连环画滤镜
Jun 09 Python
Python万能模板案例之matplotlib绘制直方图的基本配置
Apr 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的Yii框架的组件化机制的基本知识
2016/03/17 PHP
php用户密码加密算法分析【Discuz加密算法】
2016/10/12 PHP
PHP编辑器PhpStrom运行缓慢问题
2017/02/21 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
2019/09/10 PHP
ext实现完整的登录代码
2008/08/08 Javascript
网页和浏览器兼容性问题汇总(draft1)
2009/06/01 Javascript
JavaScript 密码强度判断代码
2009/09/05 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
JS限制文本框只能输入数字和字母方法
2015/02/28 Javascript
AngularJS Select(选择框)使用详解
2017/01/18 Javascript
详解Vue如何支持JSX语法
2017/11/10 Javascript
vue根据进入的路由进行原路返回的方法
2018/09/26 Javascript
JQuery搜索框自动补全(模糊匹配)功能实现示例
2019/01/08 jQuery
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
2019/02/14 jQuery
Vuex的各个模块封装的实现
2020/06/05 Javascript
vue 里面的 $forceUpdate() 强制实例重新渲染操作
2020/09/21 Javascript
vue+springboot+element+vue-resource实现文件上传教程
2020/10/21 Javascript
[03:55]2014DOTA2国际邀请赛 Fnatic经理采访赢DK在情理之中
2014/07/10 DOTA
python函数局部变量用法实例分析
2015/08/04 Python
Python 多进程并发操作中进程池Pool的实例
2017/11/01 Python
PyTorch 对应点相乘、矩阵相乘实例
2019/12/27 Python
详解Pandas 处理缺失值指令大全
2020/07/30 Python
Python应用自动化部署工具Fabric原理及使用解析
2020/11/30 Python
手把手教你实现一个canvas智绘画板的方法
2019/03/04 HTML / CSS
Veronica Beard官网:在酷、经典和别致之间找到了平衡
2018/01/11 全球购物
俄罗斯鲜花递送:AMF
2020/04/24 全球购物
性能测试工程师的面试题
2015/02/20 面试题
六十岁生日答谢词
2014/01/10 职场文书
作文批改评语大全
2014/04/23 职场文书
生日宴会策划方案
2014/06/03 职场文书
质量提升方案
2014/06/16 职场文书
技术入股合作协议书
2014/10/07 职场文书
优秀共产党员事迹材料
2014/12/18 职场文书
毕业论文致谢格式模板
2015/05/14 职场文书
酒店工程部的岗位职责汇总大全
2019/10/23 职场文书
Python实现灰色关联分析与结果可视化的详细代码
2022/03/25 Python