利用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 sort、sorted高级排序技巧
Nov 21 Python
python实现简单温度转换的方法
Mar 13 Python
利用Python爬取微博数据生成词云图片实例代码
Aug 31 Python
Python使用Pandas对csv文件进行数据处理的方法
Aug 01 Python
使用matlab或python将txt文件转为excel表格
Nov 01 Python
Python 面向对象之封装、继承、多态操作实例分析
Nov 21 Python
JupyterNotebook设置Python环境的方法步骤
Dec 03 Python
pandas to_excel 添加颜色操作
Jul 14 Python
Python urlopen()参数代码示例解析
Dec 10 Python
Python try except finally资源回收的实现
Jan 25 Python
python 实现图片裁剪小工具
Feb 02 Python
Python 全局空间和局部空间
Apr 06 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
基于mysql的bbs设计(二)
2006/10/09 PHP
如何写php程序?
2006/12/08 PHP
实用PHP会员权限控制实现原理分析
2011/05/29 PHP
php通过function_exists检测函数是否存在的方法
2015/03/18 PHP
Yii2中多表关联查询hasOne hasMany的方法
2017/02/15 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
yii2学习教程之5种内置行为类详解
2017/08/03 PHP
PHP实现负载均衡下的session共用功能
2018/04/17 PHP
浅谈Laravel核心解读之Console内核
2018/12/02 PHP
PHP fprintf()函数用法讲解
2019/02/16 PHP
js检测客户端不是firefox则提示下载
2007/04/07 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
2016/06/28 Javascript
js实现可旋转的立方体模型
2016/10/16 Javascript
JS正则获取HTML元素的方法
2017/03/31 Javascript
JS中mouseup事件丢失的原因与解决办法
2017/06/14 Javascript
基于Bootstrap的标签页组件及bootstrap-tab使用说明
2017/07/25 Javascript
node.js支持多用户web终端实现及安全方案
2017/11/29 Javascript
JS基于递归实现网页版计算器的方法分析
2017/12/20 Javascript
vue通过点击事件读取音频文件的方法
2018/05/30 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
2018/06/07 Javascript
[16:14]教你分分钟做大人:米拉娜(HEROS)
2014/11/24 DOTA
使用python和Django完成博客数据库的迁移方法
2018/01/05 Python
python切片及sys.argv[]用法详解
2018/05/25 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
2019/12/10 Python
解决Django响应JsonResponse返回json格式数据报错问题
2020/08/09 Python
CSS3制作圆形滚动进度条动画的示例
2020/11/05 HTML / CSS
高三生物教学反思
2014/01/25 职场文书
关于旷工的检讨书
2014/02/02 职场文书
物理研修随笔感言
2014/02/14 职场文书
我的中国梦演讲稿500字
2014/08/19 职场文书
树转促学习心得体会
2014/09/10 职场文书
财务工作失职检讨书
2014/11/21 职场文书
python设置 matplotlib 正确显示中文的四种方式
2021/05/10 Python
浅谈MySQL之浅入深出页原理
2021/06/23 MySQL
python实现MD5进行文件去重的示例代码
2021/07/09 Python
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
2021/11/11 Python