详解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 base64 decode incorrect padding错误解决方法
Jan 08 Python
Python数据库的连接实现方法与注意事项
Feb 27 Python
Python Pywavelet 小波阈值实例
Jan 09 Python
PyQt5 在label显示的图片中绘制矩形的方法
Jun 17 Python
wxpython布局的实现方法
Nov 01 Python
Python hashlib加密模块常用方法解析
Dec 18 Python
Python log模块logging记录打印用法解析
Jan 20 Python
浅谈ROC曲线的最佳阈值如何选取
Feb 28 Python
python将音频进行变速的操作方法
Apr 08 Python
python实现处理mysql结果输出方式
Apr 09 Python
jupyter notebook tensorflow打印device信息实例
Apr 20 Python
Python实现小黑屋游戏的完整实例
Jan 06 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
百事可乐也出咖啡了 双倍咖啡因双倍快乐
2021/03/03 咖啡文化
php批量缩放图片的代码[ini参数控制]
2011/02/11 PHP
对text数据类型不支持代码页转换 从: 1252 到: 936
2011/04/23 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
2019/04/09 PHP
Yii框架页面渲染操作实例详解
2019/07/19 PHP
jQuery实现带动画效果的多级下拉菜单代码
2015/09/08 Javascript
js提交form表单,并传递参数的实现方法
2016/05/25 Javascript
JavaScript实现星级评分
2017/01/12 Javascript
前端开发之CSS原理详解
2017/03/11 Javascript
解析Vue2 dist 目录下各个文件的区别
2017/11/22 Javascript
AjaxUpLoad.js实现文件上传
2018/03/05 Javascript
Angular开发实践之服务端渲染
2018/03/29 Javascript
JavaScript捕捉事件和阻止冒泡事件实例分析
2018/08/03 Javascript
javascript实现异形滚动轮播
2019/11/28 Javascript
javascript利用键盘控制小方块的移动
2020/04/20 Javascript
Vue使用Ref跨层级获取组件的步骤
2021/01/25 Vue.js
Django+Ajax+jQuery实现网页动态更新的实例
2018/05/28 Python
Tesserocr库的正确安装方式
2018/10/19 Python
python数据预处理之数据标准化的几种处理方式
2019/07/17 Python
Django模板导入母版继承和自定义返回Html片段过程解析
2019/09/18 Python
Python3 Click模块的使用方法详解
2020/02/12 Python
法国购买二手电子产品网站:Asgoodasnew
2020/03/27 全球购物
制定岗位职责的原则
2013/11/08 职场文书
物业管理员岗位职责范文
2013/11/25 职场文书
岗位竞聘演讲稿
2014/01/10 职场文书
圣诞节红领巾广播稿
2014/02/03 职场文书
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
致800米运动员广播稿
2014/02/16 职场文书
高二学年自我鉴定范文(2篇)
2014/09/26 职场文书
2014年司法局工作总结
2014/12/11 职场文书
2015教师年度考核评语
2015/03/25 职场文书
商场收银员岗位职责
2015/04/07 职场文书
导游词之介休绵山
2019/12/31 职场文书
python元组打包和解包过程详解
2021/08/02 Python
仅仅使用 HTML/CSS 实现各类进度条的方式汇总
2021/11/11 HTML / CSS
vue route新窗口跳转页面并且携带与接收参数
2022/04/10 Vue.js