详解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中atexit模块的基本使用示例
Jul 08 Python
简要讲解Python编程中线程的创建与锁的使用
Feb 28 Python
Python内置函数OCT详解
Nov 09 Python
一篇文章了解Python中常见的序列化操作
Jun 20 Python
python命令行工具Click快速掌握
Jul 04 Python
python常用库之NumPy和sklearn入门
Jul 11 Python
python实现桌面气泡提示功能
Jul 29 Python
python字符串格式化方式解析
Oct 19 Python
tensorflow使用freeze_graph.py将ckpt转为pb文件的方法
Apr 22 Python
python中导入 train_test_split提示错误的解决
Jun 19 Python
django 模型字段设置默认值代码
Jul 15 Python
解决python3中os.popen()出错的问题
Nov 19 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中去掉字符串首尾空格的方法
2012/05/19 PHP
php页面消耗内存过大的处理办法
2013/03/18 PHP
PHP操作MySQL事务实例
2014/11/05 PHP
ThinkPHP中redirect用法分析
2014/12/05 PHP
推荐一本PHP程序猿都应该拜读的书
2014/12/31 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
2016/04/22 PHP
功能强大的PHP发邮件类
2016/08/29 PHP
Thinkphp框架中D方法与M方法的区别
2016/12/23 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
2017/07/10 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
jQuery中hide()方法用法实例
2014/12/24 Javascript
JavaScript简单下拉菜单实例代码
2015/09/07 Javascript
BootStrap Table复选框默认选中功能的实现代码(从数据库获取到对应的状态进行判断是否为选中状态)
2017/07/11 Javascript
Node.js五大应用性能技巧小结(必须收藏)
2017/08/09 Javascript
jquery ztree实现右键收藏功能
2017/11/20 jQuery
微信小程序定位当前城市的方法
2018/07/19 Javascript
node.js中 redis 的安装和基本操作示例
2020/02/10 Javascript
Python语言技巧之三元运算符使用介绍
2013/03/04 Python
python通过伪装头部数据抵抗反爬虫的实例
2018/05/07 Python
Python爬虫之UserAgent的使用实例
2019/02/21 Python
python tornado使用流生成图片的例子
2019/11/18 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
2020/12/11 Python
微信浏览器取消缓存的方法
2015/03/28 HTML / CSS
video.js支持m3u8格式直播的实现示例
2020/05/20 HTML / CSS
C语言编程练习
2012/04/02 面试题
门诊手术室工作制度
2014/01/30 职场文书
广告词串烧
2014/03/19 职场文书
医师定期考核实施方案
2014/05/07 职场文书
群众路线对照检查材料思想汇报怎么写
2014/09/18 职场文书
流动人口婚育证明范本
2014/09/26 职场文书
初中差生评语
2014/12/29 职场文书
爱心捐助活动总结
2015/05/09 职场文书
建国大业观后感
2015/06/01 职场文书
详解Python牛顿插值法
2021/05/11 Python
使用pd.merge表连接出现多余行的问题解决
2022/06/16 Python
win10滚动条自动往上跑怎么办?win10滚动条自动往上跑的解决方法
2022/08/05 数码科技