详解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实现随机生成有效手机号码及身份证功能示例
Jun 05 Python
Python使用xlwt模块操作Excel的方法详解
Mar 27 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
Jun 25 Python
Python使用googletrans报错的解决方法
Sep 25 Python
在python中画正态分布图像的实例
Jul 08 Python
python用match()函数爬数据方法详解
Jul 23 Python
pycharm配置当鼠标悬停时快速提示方法参数
Jul 31 Python
浅谈python中频繁的print到底能浪费多长时间
Feb 21 Python
Python3 利用face_recognition实现人脸识别的方法
Mar 13 Python
python中的django是做什么的
Jul 31 Python
Python系统公网私网流量监控实现流程
Nov 23 Python
利用python查看数组中的所有元素是否相同
Jan 08 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
用javascript获取地址栏参数
2006/12/22 Javascript
从JavaScript 到 JQuery (1)学习小结
2009/02/12 Javascript
javascript URL编码和解码使用说明
2010/04/12 Javascript
收集的一些Array及String原型对象的扩展实现代码
2010/12/05 Javascript
JS跨域总结
2012/08/30 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
2014/12/08 Javascript
浅谈javascript 函数内部属性
2015/01/21 Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
2015/03/18 Javascript
解决js图片加载时出现404的问题
2020/11/30 Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
2016/05/17 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
2016/11/01 Javascript
javascript 显示全局变量与隐式全局变量的区别
2017/02/09 Javascript
Vue2.0实现组件数据的双向绑定问题
2018/03/06 Javascript
angularjs手动识别字符串中的换行符方法
2018/10/02 Javascript
小程序实现短信登录倒计时
2019/07/12 Javascript
Flutter 超实用简单菜单弹出框 PopupMenuButton功能
2019/08/06 Javascript
[02:51]DOTA2英雄基础教程 艾欧
2014/01/13 DOTA
[47:06]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第一局
2016/03/05 DOTA
python将人民币转换大写的脚本代码
2013/02/10 Python
Python脚本处理空格的方法
2016/08/08 Python
Python反射和内置方法重写操作详解
2018/08/27 Python
python画图——实现在图上标注上具体数值的方法
2019/07/08 Python
python 通过手机号识别出对应的微信性别(实例代码)
2019/12/22 Python
python实现移动木板小游戏
2020/10/09 Python
Python中免验证跳转到内容页的实例代码
2020/10/23 Python
jupyter notebook指定启动目录的方法
2021/03/02 Python
瑰珀翠美国官网:Crabtree & Evelyn美国
2016/11/29 全球购物
美国值得信赖的婚恋交友网站:eHarmony
2018/10/04 全球购物
个人求职简历的自我评价
2013/10/19 职场文书
办公室主任先进事迹
2014/01/18 职场文书
工程专业求职自荐书范文
2014/02/18 职场文书
高中生职业规划范文
2014/03/09 职场文书
银行优秀员工事迹材料
2014/05/29 职场文书
2015年师德师风承诺书
2015/01/22 职场文书
JavaScript实现两个数组的交集
2022/03/25 Javascript
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA