详解python算法之冒泡排序


Posted in Python onMarch 05, 2019

python之冒泡排序

概念: 重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

详解python算法之冒泡排序

算法原理

冒泡排序算法的原理如下:

比较相邻的元素。如果第一个比第二个大,就交换他们两个。

对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

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

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

详解python算法之冒泡排序

算法分析

时间复杂度

若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数

详解python算法之冒泡排序 和记录移动次数详解python算法之冒泡排序 均达到最小值:详解python算法之冒泡排序详解python算法之冒泡排序

所以,冒泡排序最好的时间复杂度为详解python算法之冒泡排序

冒泡排序的最坏时间复杂度为详解python算法之冒泡排序

代码实现

伪代码

function bubble_sort (array, length) {
  var i, j;
  for(i from 1 to length-1){
    for(j from 0 to length-1-i){
      if (array[j] > array[j+1])
        swap(array[j], array[j+1])
    }
  }
}

伪代码解释

函数 冒泡排序 输入 一个数组名称为array 其长度为length
    i 从 1 到 (length - 1)
        j 从 0 到 (length - 1 - i)
            如果 array[j] > array[j + 1]
                交换 array[j] 和 array[j + 1] 的值
            如果结束 
        j循环结束
    i循环结束
函数结束

助记码

i∈[0,N-1)        //循环N-1遍
  j∈[0,N-1-i)      //每遍循环要处理的无序部分
   swap(j,j+1)     //两两排序(升序/降序)

python代码

#-*-coding:utf-8-*-
'''冒泡排序也称 bubble sort从小到大排序'''
import time

def bubble_sort(lst):
  '''冒泡排序'''
  # 第一次循环
  for n in range(len(lst) - 1, 0, -1): #计算原列表的长度-1,取倒序索引

    for i in range(n):
      if lst[i] > lst[i + 1]:    # 比较最后一个与倒数第二个数的值,如果倒数第二个的值,大于最后一个的值
        temp = lst[i]       # 则将倒数第二个值赋值给临时变量temp
        lst[i] = lst[i + 1]    # 替换原列表中倒数第二个索引的值为最后一个
        lst[i + 1] = temp     # 同时改变原列表中最后一个索引值为倒数第二个的值
  return lst

if __name__ == "__main__":
  lst = [54, 26, 93, 17, 77, 31, 44, 55, 20]
  af_sort=bubble_sort(lst)
  print(af_sort)

总结冒泡排序的实现(类似下面)通常会对已经排序好的数列拙劣地运行(详解python算法之冒泡排序),而插入排序在这个例子只需要详解python算法之冒泡排序个运算。算法的核心知识点是: 循环比较, 交叉换位!

Python 相关文章推荐
Python中使用PIL库实现图片高斯模糊实例
Feb 08 Python
Python实现截屏的函数
Jul 25 Python
Python内置数据结构与操作符的练习题集锦
Jul 01 Python
如何用itertools解决无序排列组合的问题
May 18 Python
Python实现冒泡排序的简单应用示例
Dec 11 Python
Python基于dom操作xml数据的方法示例
May 12 Python
对python 判断数字是否小于0的方法详解
Jan 26 Python
python3使用QQ邮箱发送邮件
May 20 Python
Python如何使用argparse模块处理命令行参数
Dec 11 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
Mar 09 Python
浅析Python迭代器的高级用法
Jul 16 Python
python在package下继续嵌套一个package
Apr 14 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
Mar 05 #Python
Python实现KNN(K-近邻)算法的示例代码
Mar 05 #Python
Python按钮的响应事件详解
Mar 04 #Python
Python中三元表达式的几种写法介绍
Mar 04 #Python
Python生成器的使用方法和示例代码
Mar 04 #Python
Python去除字符串前后空格的几种方法
Mar 04 #Python
python调用外部程序的实操步骤
Mar 04 #Python
You might like
php实现session自定义会话处理器的方法
2015/01/27 PHP
php 类中的常量、静态属性、非静态属性的区别
2017/04/09 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
JavaScript中使用构造函数实现继承的代码
2010/08/12 Javascript
JQuery获取当前屏幕的高度宽度的实现代码
2011/07/12 Javascript
jquery中:input和input的区别分析
2011/07/13 Javascript
浅析JQuery UI Dialog的样式设置问题
2013/12/18 Javascript
JavaScript中操作字符串小结
2015/05/04 Javascript
jQuery跨域问题解决方案
2015/08/03 Javascript
Javascript HTML5 Canvas实现的一个画板
2020/04/12 Javascript
JS中关于事件处理函数名后面是否带括号的问题
2016/11/16 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
Vue.set()实现数据动态响应的方法
2018/02/07 Javascript
Python 3.x 连接数据库示例(pymysql 方式)
2017/01/19 Python
python基础_文件操作实现全文或单行替换的方法
2017/09/04 Python
Python操作mongodb数据库的方法详解
2018/12/08 Python
Series和DataFrame使用简单入门
2019/11/13 Python
使用Matplotlib 绘制精美的数学图形例子
2019/12/13 Python
简单了解pytest测试框架setup和tearDown
2020/04/14 Python
Python 必须了解的5种高级特征
2020/09/10 Python
html5实现滑块功能之type="range"属性
2020/02/18 HTML / CSS
Canvas实现放大镜效果完整案例分析(附代码)
2020/11/26 HTML / CSS
马来西亚奢侈品牌购物商城:Valiram 247
2020/09/29 全球购物
得到Class的三个过程是什么
2012/08/10 面试题
C语言中break与continue的区别
2012/07/12 面试题
公司成本主管岗位责任制
2014/02/21 职场文书
毕业生求职自荐书范文
2014/03/27 职场文书
服务口号大全
2014/06/11 职场文书
商务经理岗位职责
2014/08/03 职场文书
不服从公司安排检讨书
2014/09/24 职场文书
2014年社团工作总结范文
2014/11/27 职场文书
2014年高一班主任工作总结
2014/12/05 职场文书
一年级小学生评语大全
2014/12/25 职场文书
风之谷观后感
2015/06/11 职场文书
vue如何在data中引入图片的正确路径
2022/06/05 Vue.js