利用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、Javascript中的闭包比较
Feb 04 Python
使用beaker让Facebook的Bottle框架支持session功能
Apr 23 Python
python使用Image处理图片常用技巧分析
Jun 01 Python
python3实现磁盘空间监控
Jun 21 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
解决pycharm 误删掉项目文件的处理方法
Oct 22 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
Dec 19 Python
Pytorch实现各种2d卷积示例
Dec 30 Python
pytorch实现seq2seq时对loss进行mask的方式
Feb 18 Python
Python HTTP下载文件并显示下载进度条功能的实现
Apr 02 Python
通过python 执行 nohup 不生效的解决
Apr 16 Python
Python pyecharts绘制条形图详解
Apr 02 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
PHP常用函数小技巧
2008/09/11 PHP
php生成随机密码的几种方法
2011/01/17 PHP
PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析
2014/08/18 PHP
一个简单的php路由类
2016/05/29 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
2017/03/15 PHP
JS链式调用的实现方法
2013/03/07 Javascript
使用JavaScript构建JSON格式字符串实现步骤
2013/03/22 Javascript
js监听键盘事件的方法_原生和jquery的区别详解
2016/10/10 Javascript
javascript实现获取图片大小及图片等比缩放的方法
2016/11/24 Javascript
jquery实现异步加载图片(懒加载图片一种方式)
2017/04/24 jQuery
详解使用vue实现tab 切换操作
2017/07/03 Javascript
JavaScript实现删除数组重复元素的5种常用高效算法总结
2018/01/18 Javascript
JS回调函数原理与用法详解【附PHP回调函数】
2019/07/20 Javascript
JS如何把字符串转换成json
2020/02/21 Javascript
python将多个文本文件合并为一个文本的代码(便于搜索)
2011/03/13 Python
python线程锁(thread)学习示例
2013/12/04 Python
python 解析XML python模块xml.dom解析xml实例代码
2014/02/07 Python
使用Python中的线程进行网络编程的入门教程
2015/04/15 Python
简单介绍Python下自己编写web框架的一些要点
2015/04/29 Python
浅谈python装饰器探究与参数的领取
2017/12/01 Python
彻底搞懂Python字符编码
2018/01/23 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
2018/04/19 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
python获取array中指定元素的示例
2019/11/26 Python
tensorflow 变长序列存储实例
2020/01/20 Python
Python while循环使用else语句代码实例
2020/02/07 Python
Jmeter HTTPS接口测试证书导入过程图解
2020/07/22 Python
python网络爬虫实现发送短信验证码的方法
2021/02/25 Python
css3+jq创作含苞待放的荷花
2014/02/20 HTML / CSS
HTML5 canvas基本绘图之文字渲染
2016/06/27 HTML / CSS
雅诗兰黛澳大利亚官网:Estée Lauder澳大利亚
2019/05/31 全球购物
静态成员和非静态成员的区别
2012/05/12 面试题
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
报告会主持词
2014/04/02 职场文书
文明和谐家庭事迹材料(2016精选版)
2016/02/29 职场文书
浅谈Golang 切片(slice)扩容机制的原理
2021/06/09 Golang