python中排序从小到大_从Python看排序:冒泡排序
冒泡排序在排序算法中是最简单的一种,它通过多次遍历列表,将最大的元素冒泡到列表的头部或尾部。我们通过对四张扑克牌(花色相同)以从小到大的方式进行排序来演示该算法的工作原理。首先将扑克牌面朝上放在桌上,如下图所示:
该算法要求多次遍历扑克,每次都从头开始,并在上一次遍历的前一张结束。在每一次遍历中,总是从前两张牌开始。如果前者比后者大,则交换位置。
然后比较第二张和第三张,同样如果前者更大则互换,否则保持原样。
这样依次类推,直到将最大的那一张牌移动到最后。
下图演示了接下来的两次遍历。第二次遍历将会使第二大的牌交换至倒数第二的位置上,第三次只需比较头两张,然后整个流程结束。
下面是Python版的冒泡排序:
# Sorts a sequence in ascending order using the bubble sort algorithm.
def bubbleSort( theSeq ):
n = len( theSeq )
# Perform n-1 bubble operations on the sequence
for i in range( n - 1 ) :
# Bubble the largest item to the end.
for j in range( i + n - 1 ) :
if theSeq[j] > theSeq[j + 1] : # swap the j and j+1 items.
tmp = theSeq[j]
theSeq[j] = theSeq[j + 1]
theSeq[j + 1] = tmp
冒泡排序的效率仅仅取决于列表中元素的个数,与元素的值和初始序列无关。为了确认其效率,我们必须知道一个含有N个元素的列表在排序时内层循环总的执行次数。外层一共会循环n - 1次,因为需要遍历n - 1次列表。而内层循环不定,第一次列表遍历执行n - 1次,第二次n - 2次,第三次则是n - 3次,直到最后一次遍历内层只需执行1次即可。这样,内部循环总的遍历次数是前n - 1个整数的总和,即等同于:
得到其时间复杂度为O(n2)。正因如此,冒泡排序是排序算法中效率最低的一种。如果给定一个倒序的列表,那每次迭代的内层循环中都会做交换操作,这在实际操作中无疑是非常耗性能的。
在前面的代码中,其内层循环总是n2,但如果给定序列已经是排好序的呢?该情况下,排序实际是不需要的,但代码并不知情,它依然如此辛勤劳作,以至于其性能依旧是n2。
更多请参考:Rance D. Necaise - 《Data Structures and Algorithms Using Python》
python中排序从小到大_从Python看排序:冒泡排序相关推荐
- python中 什么意思_请问python中%代表什么意思?
婷婷同学_ 1.格式符例如:a = 'test'print 'it is a %s' %(a)打印的结果就是 it is a test2.单独看%,是一个运算符号,求余数.例如:求模运算,相当于mod ...
- python中的帮助_在Python中使用help帮助
原博文 2014-10-18 23:21 − 在Python中使用help帮助 >>> import numpy >>> help(numpy.argsort) H ...
- python中if控制语句_了解Python控制流语句——if语句
控制流 截止到现在,在我们所看过的程序中,总是有一系列语句从上到下精确排列,并交由 Python 忠实地执行.如果你想改变这一工作流程,应该怎么做?就像这样的情况:你需要程序作出一些决定,并依据不同的 ...
- 在python中设置密码登录_在python中生成密码
在python中生成密码 我想在python中生成一些字母数字密码. 一些可能的方法是: import string from random import sample, choice chars = ...
- python中select模块_基于python select.select模块通信的实例讲解 如何用python写个串口通信的程序...
python socket怎么利用select实现双工通信 方法: Before : 0000000000000000000000000000000000000000 After pack: 0100 ...
- python中mod运算符_自定义 Python 类中的运算符和函数重载(上)
Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 如果你对 Python 中的str对象使用过 + 或 * 运算符,你一定注意到了它的操作与 int 或 f ...
- python中定义无符号整数_在python中如何将有符号整数转换为无符号整数
要获得与C类型转换相等的值,只需按位并使用适当的掩码.e. g.如果unsigned long是32位:>>> i = -6884376 >>> i & 0 ...
- lambda在python中的用法_在python中对lambda使用.assign()方法
我在Python中运行以下代码:#Declaring these now for later use in the plots TOP_CAP_TITLE = 'Top 10 market capit ...
- python中class变量_对python 中class与变量的使用方法详解
python中的变量定义是很灵活的,很容易搞混淆,特别是对于class的变量的定义,如何定义使用类里的变量是我们维护代码和保证代码稳定性的关键. #!/usr/bin/python #encoding ...
- python中__init__方法_关于python中__init__方法理解
在理解__init__方法之前,我们需要搞明白,什么时候才需要用到的这个方法 什么是__init__? __init__方法在python中是类的初始化,通俗来讲,就是每次只要你去创建一个类的实例对象 ...
最新文章
- ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务-Oracle连接错误
- 实战2--应用EL表达式显示投票结果
- java jdk下载过慢 解决方案
- 【深度学习笔记】关键点检测——标签(Ground Truth)构建
- vim 居中光标所在行(转载)
- 【PC工具】200324更新百度网盘下载工具——最新百度网盘下载工具使用方法及注意事项...
- 遍历XML引擎版本以适应代码
- [POJ1338]Ugly Numbers
- 关于Mysql DATE_FORMAT() 日期格式
- 逆波兰计算器android源码简书,计算器的核心算法-JavaScript实现(逆波兰表达式)...
- 【转】“线程间操作无效: 从不是创建控件的线程访问它”
- JPA、Hibernate、Mybatis的区别
- js判断是否为ie浏览器
- java学习软件_刚学习java,用哪些学习软件比较好?
- 【2021山东大学数字逻辑实验7】异步模8加1计数器
- 肝了这篇文章,我对服务器硬件有了深刻的认识!
- Java成神之路(持续更新)
- DirectX11 交换链是什么
- springboot学习中的错误
- 静态语言采用什么方式执行 如c语言,编程语言的两种执行方式
热门文章
- 【渝粤教育】广东开放大学 数据结构 形成性考核 (30)
- 为什么BAT这些大企业都喜欢用LoRa技术?
- 分数化简_分数应用题七讲 (一) 图示法解分数应用题
- #让人物运动_篮球人物之黄云龙,淡泊名利的他是篮球运动员中的楷模,你可记得...
- matlab 进度条/waitbar 显示运行进度
- 马尔可夫决策过程 Markov decision process MDP, 连续时间Markov chain, CMDP(全)
- printf sizeof c语言,你可能对 sizeof(i++) 有点误解。。。
- 连不上机器判断机器状态_KUKA机器人为什么KPP故障联不上,断电重启hou报RDC连接连接不上...
- 鸿蒙系统6月可升级,华为鸿蒙2.0系统大规模升级从6月开始?
- usb转ttl模块与matlab,USB接口转TTL小板的自检测试