详解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中多线程及程序锁浅析
Jan 21 Python
Python单元测试框架unittest简明使用实例
Apr 13 Python
python 中random模块的常用方法总结
Jul 08 Python
python中map()函数的使用方法示例
Sep 29 Python
AI人工智能 Python实现人机对话
Nov 13 Python
python编写弹球游戏的实现代码
Mar 12 Python
matlab中实现矩阵删除一行或一列的方法
Apr 04 Python
python使用tcp实现局域网内文件传输
Mar 20 Python
解决python执行不输出系统命令弹框的问题
Jun 24 Python
在django admin中添加自定义视图的例子
Jul 26 Python
简单了解python字符串前面加r,u的含义
Dec 26 Python
Python装饰器如何实现修复过程解析
Sep 05 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
CPU步进是什么意思?i3-9100F B0步进和U0步进区别知识科普
2020/03/17 数码科技
索尼ICF-SW100收音机评测
2021/03/02 无线电
Windows PHP5和Apache的安装与配置
2009/06/08 PHP
PHP闭包实例解析
2014/09/08 PHP
php+mysqli数据库连接的两种方式
2015/01/28 PHP
php将数组转换成csv格式文件输出的方法
2015/03/14 PHP
如何使用微信公众平台开发模式实现多客服
2016/01/06 PHP
PHP生成短网址方法汇总
2016/07/12 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
2020/04/26 PHP
javascript 四则运算精度修正函数代码
2010/05/31 Javascript
jquery中动态效果小结
2010/12/16 Javascript
时间戳转换为时间 年月日时间的JS函数
2013/08/19 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
2015/03/05 Javascript
使用JavaScript实现连续滚动字幕效果的方法
2015/07/07 Javascript
JQuery实现Ajax加载图片的方法
2015/12/24 Javascript
用js实现放大镜的效果的简单实例
2016/05/23 Javascript
彻底解决 webpack 打包文件体积过大问题
2017/07/07 Javascript
jQuery中each循环的跳出和结束实例
2017/08/16 jQuery
微信小程序实现手指拖动选项排序
2020/04/22 Javascript
[06:35]2014DOTA2国际邀请赛 老男孩梦圆西雅图中国军团世界最强
2014/07/22 DOTA
Python字符串和文件操作常用函数分析
2015/04/08 Python
Python3处理文件中每个词的方法
2015/05/22 Python
Python 登录网站详解及实例
2017/04/11 Python
屏蔽Django admin界面添加按钮的操作
2020/03/11 Python
python 连续不等式语法糖实例
2020/04/15 Python
PyQt5 控件字体样式等设置的实现
2020/05/13 Python
什么是Python包的循环导入
2020/09/08 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
2020/10/10 Python
世界上最大的街头服饰网站:Karmaloop
2017/02/04 全球购物
大一学生的职业生涯规划书范文
2014/01/19 职场文书
新学期开学寄语2016
2015/12/04 职场文书
《鸡兔同笼》教学反思
2016/02/19 职场文书
创业计划书之o2o水果店
2019/08/30 职场文书
MySQL 表空间碎片的概念及相关问题解决
2021/05/07 MySQL
详解Flask开发技巧之异常处理
2021/06/15 Python
apache ftpserver搭建ftp服务器
2022/05/20 Servers