详解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中的try和finally和with方法
May 05 Python
Python设计模式之MVC模式简单示例
Jan 10 Python
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
Mar 19 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
Apr 12 Python
Python 异常处理Ⅳ过程图解
Oct 18 Python
利用python实现冒泡排序算法实例代码
Dec 01 Python
tensorflow实现二维平面模拟三维数据教程
Feb 11 Python
python3格式化字符串 f-string的高级用法(推荐)
Mar 04 Python
python def 定义函数,调用函数方式
Jun 02 Python
浅析Python __name__ 是什么
Jul 07 Python
python+selenium 简易地疫情信息自动打卡签到功能的实现代码
Aug 22 Python
python获取时间戳的实现示例(10位和13位)
Sep 23 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
海贼王:最美的悬赏令!
2020/03/02 日漫
PHP安全编程之加密功能
2006/10/09 PHP
Content-type 的说明
2006/10/09 PHP
留言板翻页的实现详解
2006/10/09 PHP
弄了个检测传输的参数是否为数字的Function
2006/12/06 PHP
php下通过伪造http头破解防盗链的代码
2010/07/03 PHP
PHP中使用foreach和引用导致程序BUG的问题介绍
2012/09/05 PHP
php中的Base62类(适用于数值转字符串)
2013/08/12 PHP
ThinkPHP3.1新特性之G方法的使用
2014/06/19 PHP
php写入数据到CSV文件的方法
2015/03/14 PHP
CI框架中$this->load->library()用法分析
2016/05/18 PHP
javascript setTimeout和setInterval计时的区别详解
2013/06/21 Javascript
js实现无需数据库的县级以上联动行政区域下拉控件
2013/08/14 Javascript
jquery自定义滚动条插件示例分享
2014/02/21 Javascript
js获取视频时长代码
2014/04/10 Javascript
javascript获取select标签选中的值
2016/06/04 Javascript
详解Angular2 之 结构型指令
2017/06/21 Javascript
使用JavaScript开发跨平台的桌面应用详解
2017/07/27 Javascript
webpack开发跨域问题解决办法
2017/08/03 Javascript
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
js计算两个日期间的天数月的实例代码
2018/09/20 Javascript
[05:53]完美世界携手游戏风云打造 卡尔工作室观战系统篇
2013/04/22 DOTA
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
Python 2.x如何设置命令执行的超时时间实例
2017/10/19 Python
Python实现的ftp服务器功能详解【附源码下载】
2019/06/26 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
2019/09/05 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
2020/03/08 Python
Jupyter Notebook的连接密码 token查询方式
2020/04/21 Python
Django如何使用redis作为缓存
2020/05/21 Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
2020/08/17 Python
Exoticca英国:以最优惠的价格提供豪华异国情调旅行
2018/10/18 全球购物
旅游管理本科生求职信
2013/10/14 职场文书
多媒体教室标语
2014/06/26 职场文书
2016春节慰问信范文
2015/03/25 职场文书
入党后的感想
2015/08/10 职场文书
MySQL中order by的使用详情
2021/11/17 MySQL