python中排序从小到大_从Python看排序:冒泡排序

冒泡排序在排序算法中是最简单的一种,它通过多次遍历列表,将最大的元素冒泡到列表的头部或尾部。我们通过对四张扑克牌(花色相同)以从小到大的方式进行排序来演示该算法的工作原理。首先将扑克牌面朝上放在桌上,如下图所示:

5934bcc0-a907-11e3-864f-00163e0309b4.jpg

该算法要求多次遍历扑克,每次都从头开始,并在上一次遍历的前一张结束。在每一次遍历中,总是从前两张牌开始。如果前者比后者大,则交换位置。

6a05fd16-a907-11e3-b1a1-00163e0309b4.jpg

然后比较第二张和第三张,同样如果前者更大则互换,否则保持原样。

7a922cf4-a907-11e3-8bdb-00163e0309b4.jpg

这样依次类推,直到将最大的那一张牌移动到最后。

下图演示了接下来的两次遍历。第二次遍历将会使第二大的牌交换至倒数第二的位置上,第三次只需比较头两张,然后整个流程结束。

a06ffe06-a907-11e3-a519-00163e0309b4.jpg

下面是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个整数的总和,即等同于:

ccc0017c-a907-11e3-aa92-00163e0309b4.jpg

得到其时间复杂度为O(n2)。正因如此,冒泡排序是排序算法中效率最低的一种。如果给定一个倒序的列表,那每次迭代的内层循环中都会做交换操作,这在实际操作中无疑是非常耗性能的。

在前面的代码中,其内层循环总是n2,但如果给定序列已经是排好序的呢?该情况下,排序实际是不需要的,但代码并不知情,它依然如此辛勤劳作,以至于其性能依旧是n2。

更多请参考:Rance D. Necaise - 《Data Structures and Algorithms Using Python》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值