利用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 httplib,smtplib使用方法
Sep 06 Python
python实现比较两段文本不同之处的方法
May 30 Python
Python实现保证只能运行一个脚本实例
Jun 24 Python
遍历python字典几种方法总结(推荐)
Sep 11 Python
python字典多键值及重复键值的使用方法(详解)
Oct 31 Python
简单谈谈Python中的几种常见的数据类型
Feb 10 Python
Python中shutil模块的学习笔记教程
Apr 04 Python
Python之pandas读写文件乱码的解决方法
Apr 20 Python
PyQt5 pyqt多线程操作入门
May 05 Python
django 模版关闭转义方式
May 14 Python
pycharm如何使用anaconda中的各种包(操作步骤)
Jul 31 Python
django下创建多个app并设置urls方法
Aug 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制作简单分页(从数据库读取记录)的方法详解
2013/05/04 PHP
C#使用PHP服务端的Web Service通信实例
2014/04/08 PHP
在php和MySql中计算时间差的方法详解
2015/03/27 PHP
windows7配置Nginx+php+mysql的详细教程
2016/09/04 PHP
Laravel 类和接口注入相关的代码
2019/10/15 PHP
Jquery知识点一 Jquery的ready和Dom的onload的区别
2011/01/15 Javascript
kmock javascript 单元测试代码
2011/02/06 Javascript
javascript 闭包
2011/09/15 Javascript
JQuery入门——用bind方法绑定事件处理函数应用介绍
2013/02/05 Javascript
图片翻转效果具体实现代码
2014/01/09 Javascript
javascript实现在网页任意处点左键弹出隐藏菜单的方法
2015/05/13 Javascript
Javascript的表单与验证-非空验证
2016/03/18 Javascript
JQuery给select添加/删除节点的实现代码
2016/04/26 Javascript
Node.js使用Express创建Web项目详细教程
2017/03/31 Javascript
Vue组件实例间的直接访问实现代码
2017/08/20 Javascript
vue中axios解决跨域问题和拦截器的使用方法
2018/03/07 Javascript
vue数组对象排序的实现代码
2018/06/20 Javascript
jQuery实现参数自定义的文字跑马灯效果
2018/08/15 jQuery
基于vue2的canvas时钟倒计时组件步骤解析
2018/11/05 Javascript
Vue.js结合bootstrap前端实现分页和排序效果
2018/12/29 Javascript
jQuery分组选择器简单用法示例
2019/04/04 jQuery
Vue常用传值方式、父传子、子传父及非父子实例分析
2020/02/24 Javascript
[01:45]绝对公平!DOTA2队长征召模式详解
2014/04/25 DOTA
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
Python 3.x 连接数据库示例(pymysql 方式)
2017/01/19 Python
python中实现字符串翻转的方法
2018/07/11 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
Python 如何实现数据库表结构同步
2020/09/29 Python
jupyter notebook更换皮肤主题的实现
2021/01/07 Python
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
C&A巴西网上商店:时尚、衣服、手机和鞋子
2020/06/07 全球购物
关键字throw与throws的用法差异
2016/11/22 面试题
中国好声音华少广告词
2014/03/17 职场文书
个人投资合作协议书
2014/10/12 职场文书
售房协议书范本2014
2014/10/23 职场文书
导游词之襄阳古城
2019/09/27 职场文书