python冒泡排序代码通俗理解(详解python算法之冒泡排序)
python冒泡排序代码通俗理解
详解python算法之冒泡排序python之冒泡排序
概念: 重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从a到z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
算法原理
冒泡排序算法的原理如下:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
算法分析
时间复杂度
若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数
和记录移动次数 均达到最小值: , 。
所以,冒泡排序最好的时间复杂度为 。
冒泡排序的最坏时间复杂度为
代码实现
伪代码
|
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) |
总结冒泡排序的实现(类似下面)通常会对已经排序好的数列拙劣地运行(),而插入排序在这个例子只需要个运算。算法的核心知识点是: 循环比较, 交叉换位!
原文链接:https://www.cnblogs.com/failymao/p/10474674.html
- python分支的描述(学习python分支结构)
- python创建字典的代码(Python创建字典的八种方式)
- python八卦图(Python实现九宫格式的朋友圈功能内附“马云”朋友圈)
- python远程下发shell指令(Python实现堡垒机模式下远程命令执行操作示例)
- python中的time时间模块使用知识(python实现简单日期工具类)
- python 多进程读取文件(Python实现的多进程拷贝文件并显示百分比功能示例)
- python中的冒号怎么看(python 列表中[ ]中冒号‘:’的作用)
- python操作sql server数据库(Python 数据库操作 SQLAlchemy的示例代码)
- 未来10年python前景(Python应用领域和就业形势分析总结)
- 如何用python处理excel表格(零基础使用Python读写处理Excel表格的方法)
- python中dict怎么创建(Python数据类型之Dict字典实例详解)
- python操作pandas(详解Python学习之安装pandas)
- pythondjango图解(详解Django-restframework 之频率源码分析)
- python进度条怎么实现(Python小进度条显示代码)
- python把文件上传服务器(Python 实现两个服务器之间文件的上传方法)
- python socket 设置通信协议(详解python中TCP协议中的粘包问题)
- 读卖乐园的彩灯(读卖乐园的彩灯)
- 新疆80后在淘宝卖干果 以前是 不务正业 如今帮乡亲致富(新疆80后在淘宝卖干果)
- 弄清楚了销 售 买 卖这四个字,母婴生意做起来就没那么难了(弄清楚了销售买)
- 数读 买首饰金是 投资黄金 吗 买金容易卖金难(数读买首饰金是)
- 销 售 买 卖 你真的了解这四个字了吗(销售买)
- 谢娜是得罪快乐大本营造型师了吗 全场被黑化(谢娜是得罪快乐大本营造型师了吗)
热门推荐
- dedecms无缩略图怎么设置(dedecmsV5.7版 tag标签长度的修改方法详解)
- 安卓app开发用什么设计ui(AmazeUI框架搭建的方法步骤图文)
- spring boot 如何启动tomcat(传统tomcat启动服务与springboot启动内置tomcat服务的区别推荐)
- dedecms关闭站点(dedecms搬家后出现/include/templets/default/index.htm Not Found!解决方案)
- 查看IO量大的SQL语句及它们的执行计划
- laravel跳转后需要授权吗(解决Laravel5.2 Auth认证退出失效的问题)
- python中jieba库怎么用(详解Python数据可视化编程 - 词云生成并保存jieba+WordCloud)
- 腾讯云轻量应用服务器与VPS服务器、虚拟主机有什么区别?(腾讯云轻量应用服务器与VPS服务器、虚拟主机有什么区别?)
- 查询mysql 死锁(MySQL线上死锁分析实战)
- 手动设置linuxdns服务器(云服务器Linux系统配置DNS方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9