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实现查找匹配项作处理后再替换回去的方法
Jun 10 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
Mar 02 Python
详解Python3的TFTP文件传输
Jun 26 Python
django 发送邮件和缓存的实现代码
Jul 18 Python
Python import与from import使用及区别介绍
Sep 06 Python
一行代码让 Python 的运行速度提高100倍
Oct 08 Python
python 使用值来排序一个字典的方法
Nov 16 Python
Python warning警告出现的原因及忽略方法
Jan 31 Python
简单了解python调用其他脚本方法实例
Mar 26 Python
keras用auc做metrics以及早停实例
Jul 02 Python
python全栈开发语法总结
Nov 22 Python
python SOCKET编程基础入门
Feb 27 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
解析关于wamp启动是80端口被占用的问题
2013/06/21 PHP
ThinkPHP之用户注册登录留言完整实例
2014/07/22 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
2014/07/28 PHP
JSP跨iframe如何传递参数实现代码
2013/09/21 Javascript
Jquery 获取对象的几种方式介绍
2014/01/17 Javascript
javascript实现避免页面按钮重复提交
2015/01/08 Javascript
jQuery插件kinMaxShow扩展效果用法实例
2015/05/04 Javascript
jquery实现横向图片轮播特效代码分享
2015/11/19 Javascript
jquery+ajax实现注册实时验证实例详解
2015/12/08 Javascript
js 动态添加元素(div、li、img等)及设置属性的方法
2016/07/19 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
基于原生js淡入淡出函数封装(兼容IE)
2016/10/20 Javascript
JS实现倒计时(天数、时、分、秒)
2016/11/16 Javascript
D3.js中强制异步文件读取同步的几种方法
2017/02/06 Javascript
node.js入门教程之querystring模块的使用方法
2017/02/27 Javascript
Nuxt.js实战详解
2018/01/18 Javascript
解决Js先触发失去焦点事件再执行点击事件的问题
2018/08/30 Javascript
详解ES6 Symbol 的用途
2018/10/14 Javascript
一秒学会微信小程序制作table表格
2019/02/14 Javascript
JS Generator 函数的含义与用法实例总结
2020/04/08 Javascript
python通过wxPython打开一个音频文件并播放的方法
2015/03/25 Python
简要讲解Python编程中线程的创建与锁的使用
2016/02/28 Python
python实现简单聊天应用 python群聊和点对点均实现
2017/09/14 Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
2017/09/26 Python
对numpy数据写入文件的方法讲解
2018/07/09 Python
使用pickle存储数据dump 和 load实例讲解
2019/12/30 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
2020/05/25 Python
Pretty You London官网:英国拖鞋和睡衣品牌
2019/05/08 全球购物
会计实习自我鉴定
2013/12/04 职场文书
优秀员工年终发言演讲稿
2014/01/01 职场文书
促销活动方案模板
2014/02/24 职场文书
三分钟演讲稿范文
2014/04/24 职场文书
学校师德师风整改方案
2014/10/28 职场文书
大二学年个人总结
2015/03/03 职场文书
女方家长婚礼答谢词
2015/09/29 职场文书
Python pandas之求和运算和非空值个数统计
2021/08/07 Python