利用python实现冒泡排序算法实例代码


Posted in Python onDecember 01, 2019

冒泡排序

冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

冒泡排序算法的运作如下:

1、比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。

2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

3、针对所有的元素重复以上的步骤,除了最后一个。

4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

冒泡排序,一个经典的排序算法,因在算法运行中,极值会像水底的气泡一样逐渐冒出来,因此而得名。

冒泡排序的过程是比较两个相邻元素的大小,然后根据大小交换位置,这样从列表左端开始冒泡,最后最大值会依次从右端冒出。 

利用python实现冒泡排序算法实例代码

python实现冒泡排序:

def bubble_sort(nums):

 for i in range(len(nums) - 1):

  for j in range(len(nums) - i - 1):

   if nums[j] > nums[j + 1]:

    nums[j], nums[j + 1] = nums[j + 1], nums[j]

 return nums

python实现冒泡排序的核心思想是通过从列表一端迭代循环元素,再通过一个循环让这个元素之后的元素相邻两个比较,从而依次将最大值移动到最末端,如下图示意。

利用python实现冒泡排序算法实例代码

本想放gif图的,放不上有点问题。

关于冒泡排序的时间复杂度,在上面python实现的代码中时间复杂度是n的平方,当然可以再考虑一下极端的情况:当队列已经从小到大排好序或者从大到小排好序,从小到大排好顺序时可以只扫描一遍就结束排序,此时时间复杂度为O(n),如果是从大到小,那么就需要扫描n-1次,同时需要比较交换n-1次,时间复杂度为n的平方 。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python天气预报采集器实现代码(网页爬虫)
Oct 07 Python
python实现系统状态监测和故障转移实例方法
Nov 18 Python
Python复制目录结构脚本代码分享
Mar 06 Python
在Python程序中操作文件之isatty()方法的使用教程
May 24 Python
批量获取及验证HTTP代理的Python脚本
Apr 23 Python
Python编程实现微信企业号文本消息推送功能示例
Aug 21 Python
Matplotlib 生成不同大小的subplots实例
May 25 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
Jul 17 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
Dec 19 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
Feb 27 Python
Python使用matplotlib绘制Logistic曲线操作示例
Nov 28 Python
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
Apr 24 Python
Python函数的默认参数设计示例详解
Dec 01 #Python
python线程定时器Timer实现原理解析
Nov 30 #Python
python线程信号量semaphore使用解析
Nov 30 #Python
Python一行代码解决矩阵旋转的问题
Nov 30 #Python
Numpy之将矩阵拉成向量的实例
Nov 30 #Python
numpy np.newaxis 的实用分享
Nov 30 #Python
Python如何使用函数做字典的值
Nov 30 #Python
You might like
使用TinyButStrong模板引擎来做WEB开发
2007/03/16 PHP
PHP实现采集程序原理和简单示例代码
2007/03/18 PHP
php获取post中的json数据的实现方法
2011/06/08 PHP
模板引擎正则表达式调试小技巧
2011/07/20 PHP
PHP实现的浏览器检查类
2016/04/11 PHP
PHP fclose函数用法总结
2019/02/15 PHP
PHP面向对象程序设计之构造方法和析构方法详解
2019/06/13 PHP
JavaScript 继承详解(三)
2009/07/13 Javascript
单击复制文字兼容各浏览器的完美解决方案
2013/07/04 Javascript
json格式的时间显示为正常年月日的方法
2013/09/08 Javascript
jQuery对html元素取值与赋值的方法
2013/11/20 Javascript
JavaScript仿支付宝密码输入框
2015/12/29 Javascript
jQuery模拟360浏览器切屏效果幻灯片(附demo源码下载)
2016/01/29 Javascript
JavaScript中的事件委托及好处
2016/07/12 Javascript
浅谈DOCTYPE对$(window).height()取值的影响
2016/07/21 Javascript
如何在 Vue.js 中使用第三方js库
2017/04/25 Javascript
React Native第三方平台分享的实例(Android,IOS双平台)
2017/08/04 Javascript
实现单层json按照key字母顺序排序的示例
2017/12/06 Javascript
element-ui upload组件多文件上传的示例代码
2018/10/17 Javascript
浅谈vue中组件绑定事件时是否加.native
2019/11/09 Javascript
Angular6项目打包优化的实现方法
2019/12/15 Javascript
Python排序搜索基本算法之插入排序实例分析
2017/12/11 Python
Python数据结构与算法之字典树实现方法示例
2017/12/13 Python
PHP面试题附答案
2015/11/28 面试题
关键字final的用法
2013/10/02 面试题
集团薪酬管理制度
2014/01/13 职场文书
简历中的自我评价怎么写
2014/01/29 职场文书
毕业生简历自我评价范文
2014/04/09 职场文书
2014年教师思想工作总结
2014/12/03 职场文书
财务负责人岗位职责
2015/02/03 职场文书
英语辞职信范文
2015/02/28 职场文书
应届毕业生自荐信
2015/03/04 职场文书
老人节主持词
2015/07/04 职场文书
2019终止劳动合同协议书最新范本!
2019/07/09 职场文书
详解python的内存分配机制
2021/05/10 Python
Python可视化学习之matplotlib内置单颜色
2022/02/24 Python