详解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 11 Python
利用Python破解斗地主残局详解
Jun 30 Python
Python实现扣除个人税后的工资计算器示例
Mar 26 Python
Python 读取某个目录下所有的文件实例
Jun 23 Python
Python Django 封装分页成通用的模块详解
Aug 21 Python
Django 项目通过加载不同env文件来区分不同环境
Feb 17 Python
python实现从尾到头打印单链表操作示例
Feb 22 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
Apr 25 Python
python利用paramiko实现交换机巡检的示例
Sep 22 Python
用python-webdriver实现自动填表的示例代码
Jan 13 Python
Python中全局变量和局部变量的理解与区别
Feb 07 Python
Python中glob库实现文件名的匹配
Jun 18 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 insert语法详解
2008/06/07 PHP
PHP中的错误处理、异常处理机制分析
2012/05/07 PHP
PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
2016/10/14 PHP
javascript贪吃蛇完整版(源码)
2013/12/09 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
jquery实现界面无刷新加载登陆注册
2016/07/30 Javascript
JS抛物线动画实例制作
2018/02/24 Javascript
vue 子组件向父组件传值方法
2018/02/26 Javascript
vue2.0 computed 计算list循环后累加值的实例
2018/03/07 Javascript
详解vue-cli3使用
2018/08/14 Javascript
Vue退出登录时清空缓存的实现
2019/11/12 Javascript
[02:33]2014DOTA2 TI每日综述 LGD涉险晋级DK闯入胜者组
2014/07/14 DOTA
python Selenium爬取内容并存储至MySQL数据库的实现代码
2017/03/16 Python
由浅入深讲解python中的yield与generator
2017/04/05 Python
解决PyCharm的Python.exe已经停止工作的问题
2018/11/29 Python
Django后台admin的使用详解
2019/07/08 Python
Python partial函数原理及用法解析
2019/12/11 Python
TensorFlow——Checkpoint为模型添加检查点的实例
2020/01/21 Python
开启Django博客的RSS功能的实现方法
2020/02/17 Python
Python文件时间操作步骤代码详解
2020/04/13 Python
Meli Melo官网:名媛们钟爱的英国奢侈手包品牌
2017/04/17 全球购物
北京一家公司的.net开发工程师笔试题
2012/04/17 面试题
个人自我鉴定总结
2014/03/25 职场文书
关于环保的演讲稿
2014/05/10 职场文书
课例研修方案
2014/05/31 职场文书
教师求职自荐书
2014/06/14 职场文书
竞选班长演讲稿500字
2014/08/22 职场文书
2014年党风廉政工作总结
2014/12/03 职场文书
2015年卫生监督工作总结
2015/05/21 职场文书
安全教育培训制度
2015/08/06 职场文书
生日祝酒词大全
2015/08/10 职场文书
学习党章心得体会2016
2016/01/15 职场文书
手把手教你制定暑期学习计划,让你度过充实的暑假
2019/08/22 职场文书
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
2021/04/27 Python
Django框架模板用法详解
2022/06/10 Python