考试考完了,想安下心来看看算法。不知道自己在这条路上能走多远,但不管怎么样,加油吧,Leaving。
首先是插入排序。它的过程算法导论比喻得很好,就如同打牌一样,手中有一些已经排好序的牌,然后从牌堆中抓一张新牌,从右到左依次比较,直到找到合适的位置放下。
每次迭代的过程中,数组左边已排序好的数据长度逐渐增大,直到整个数组都排序好。左边已排好序的部分可以看成是手牌,而右边未排序的部分可以看做是牌堆,循环不变量在每次迭代过程中都得以保持。
因为不想纠结于太多的语言细节,因此用Python来实现,下面是代码:
def insertionSort(L, n):
j = 1
while(j < n):
key = L[j]
i = j - 1
while(i >= 0 and L[i] > key):
L[i + 1] = L[i]
i = i - 1
L[i + 1] = key
j = j + 1
return L
容易看出,T(n) = ΣΘ(i),其中中i ∈ [1, n – 1]
T(n) = Θ(n2)
浙公网安备 33010602011771号