详解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中的With语句
Feb 02 Python
python数组复制拷贝的实现方法
Jun 09 Python
Python文件操作之合并文本文件内容示例代码
Sep 19 Python
分析python动态规划的递归、非递归实现
Mar 04 Python
python通过配置文件共享全局变量的实例
Jan 11 Python
详解用python写网络爬虫-爬取新浪微博评论
May 10 Python
利用python计算windows全盘文件md5值的脚本
Jul 27 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
May 26 Python
python 元组的使用方法
Jun 09 Python
Python使用socket模块实现简单tcp通信
Aug 18 Python
Python 实现定积分与二重定积分的操作
May 26 Python
Pygame Rect区域位置的使用(图文)
Nov 17 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
php中经典方法实现判断多维数组是否为空
2011/10/23 PHP
抛弃 PHP 代价太高
2016/04/26 PHP
PHP入门教程之操作符与控制结构流程详解
2016/09/09 PHP
laravel-admin 中列表筛选方法
2019/10/03 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
用JQuery 实现AJAX加载XML并解析的脚本
2009/07/25 Javascript
JavaScript计算字符串中每个字符出现次数的小例子
2013/07/02 Javascript
JS.findElementById()使用介绍
2013/09/21 Javascript
js实现点击切换TAB标签实例
2015/08/21 Javascript
javascript动画之模拟拖拽效果篇
2016/09/26 Javascript
WEB 前端开发中防治重复提交的实现方法
2016/10/26 Javascript
AngularJS中transclude用法详解
2016/11/03 Javascript
JS给按钮添加跳转功能类似a标签
2017/05/30 Javascript
vuejs使用递归组件实现树形目录的方法
2017/09/30 Javascript
JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
2018/02/06 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
Angular使用操作事件指令ng-click传多个参数示例
2018/03/27 Javascript
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
JS中的继承操作实例总结
2020/06/06 Javascript
Python计算一个文件里字数的方法
2015/06/15 Python
python3中利用filter函数输出小于某个数的所有回文数实例
2019/11/24 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
2020/02/20 Python
使用python爬取抖音app视频的实例代码
2020/12/01 Python
HTML5 解决苹果手机不能自动播放音乐问题
2017/12/27 HTML / CSS
香港最大的洋酒零售连锁店:屈臣氏酒窖(Watson’s Wine)
2018/12/10 全球购物
Mybag美国/加拿大:英国奢华包包和名牌手袋网站
2020/02/16 全球购物
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
高级Java程序员面试题
2016/06/23 面试题
天网工程实施方案
2014/03/26 职场文书
好人好事演讲稿
2014/09/01 职场文书
送达通知书
2015/04/25 职场文书
幼儿园综治宣传月活动总结
2015/05/07 职场文书
销售会议开幕词
2016/03/04 职场文书
2019职场单身人才调研报告:互联网行业单身比例最高
2019/08/07 职场文书
小学四年级作文之人物作文
2019/11/06 职场文书
Anaconda安装pytorch和paddle的方法步骤
2022/04/03 Python