1. 程式人生 > >插入排序演算法python實現及分析

插入排序演算法python實現及分析

本文主要討論插入排序演算法解決n個數字自小到大的排序,及分析最壞情況和平均情況(複雜度)。

       假設我們有一個n個數,要把它們按升序排序。按照我個人的思維最笨的辦法就是先掃描一遍(一個迭代),找出最小數,然後在剩餘的數字中,再找出最小的數字,按照這種方法到排序下去,最後就能把這一堆數字按升序輸出(自上而下)。

        插入排序的演算法過程如下:

過程如下:

n=2,預設第一個數字最小,置於左邊,第二個數字和左邊相鄰的第一個數字比較,大於或者等於則不變動位置,如果小於第一個數字則調換位置。

n=3,預設第一個數字最小,置於左邊,第二個數字和左邊相鄰的第一個數字比較,大於或者等於則不變動位置,如果小於第一個數字則調換位置;第三個數字(key)和左邊的相鄰的數字比較,大於或等於都不變動位置,小於則位置對調,且這個數字(key)再和第一個數字,大於或者等於位置不變,小於則位置對調。

...

n=n-1

用一句話來概括就是,將某個數字從右邊開始和一串已經排序好的陣列逐個比較然後將它置於陣列中一個合適的位置而組成升序序列。

下面的程式是使用python對插入排序的實現:

對A[8,5,1,0,7,2,3,4]   進行排序。

def su_insert_sort(list):
    for j in range(1,len(list)):
        key=list[j]
        i=j-1
        while (i>=0 and list[i]>key):
            list[i+1]=list[i]
            i=i-1
        list[i+1]=key
    return list
A=[8,5,1,0,7,2,3,4]
print A
print su_insert_sort(A)

結果如下:


  它的最壞清空就是類似這種[3,2,1]

最壞執行時間可以表示成一個二次函式:

T(n)=(an^2)+bn+c