python插入排序_从Python看排序:插入排序

本文通过一个生动的扑克牌排序实例详细介绍了插入排序算法的工作原理。利用插入排序,可以将无序的牌一张张地插入到已排序的部分,最终完成整个序列的排序。文中还提供了Python实现的插入排序算法代码。

在学习排序算法时,我们可以经常看到插入排序的身影。我们继续用扑克牌来描述该算法的实现方式。假设有5张牌以如下方式堆放在桌面上:

07d1b2f8-ac49-11e3-a073-00163e0309b4.jpg

将面上的一张牌拿起并放在手上:

1b304fe4-ac49-11e3-bf65-00163e0309b4.jpg

因为这是第一张牌,所以我们无需考虑其位置。接着再从桌面上拿起面上的一张牌并与手上的牌进行比较,然后插入到正确的位置上:

38b0a8fc-ac49-11e3-8594-00163e0309b4.jpg

接下来的操作与此相同。将梅花5取出然后放在梅花3和梅花8之间:

587f6272-ac49-11e3-8cde-00163e0309b4.jpg

重复该过程直到所有的牌都从桌上拿起并插入到手中几张牌中的正确位置。

整个过程中,插入排序同时维护两组元素,一组排序后的元素和一组待排序的元素。在上面的扑克牌例子中,桌上的一叠扑克就是待排序的元素组,手上的牌则是排序后的元素组。在程序中处理该算法时,我们将在同一序列结构中处理这两组元素。算法以列表左侧作为排序后的元素位并始终从未排序组中取出第一位进行排序操作。要定位一个元素的正确位置,必须通过搜索来解决,然后移动右边的各元素来为其让位。下面用Python实现一个简单的插入排序算法:

#Sorts a sequence in ascending order using the insertion sort algorithm.

def insertionSort( theSeq ):

n = len(theSeq)

# Starts with the first item as the only sorted entry.

for i in range( 1, n ):

# Save the value to be positioned.

value = theSeq[i]

# Find the position where value fits in the ordered part of the list.

pos = i

while pos > 0 and value < theSeq[pos - 1]:

# Shift the items to the right during the search.

theSeq[pos] = theSeq[pos - 1]

pos -= 1

# Put the saved value into the open slot.

theSeq[pos] = value

insertionSort()方法首先假设列表中的第一个元素已经在其正确的位置上。然后从第二位开始迭代并对每一个元素执行排序。由此,排序后的组始终处于列表的前部而待排序的组则处于尾部。循环中的i可以看作这两组的分界点。在内循环中,程序对当前元素进行定位,同时移动列表中的元素以为其腾出位置来。下图演示了一个列表排序的整个过程。

9fb4b598-ac49-11e3-adb3-00163e0309b4.jpg

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值