考试考完了,想安下心来看看算法。不知道自己在这条路上能走多远,但不管怎么样,加油吧,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)

posted on 2012-01-05 22:47  LeavingQ  阅读(114)  评论(0)    收藏  举报