1. 程式人生 > >Python 3 實現插入排序

Python 3 實現插入排序

直接插入排序(Straight Insertion Sort)是一種最簡單的排序方法,其基本操作是將一條記錄插入到已排好的有序表中,從而得到一個新的、記錄數量增1的有序表。是穩定的排序方法。插入演算法把要排序的陣列分成兩部分:第一部分包含了這個陣列的所有元素,但將最後一個元素除外(讓陣列多一個空間才有插入的位置),而第二部分就只包含這一個元素(即待插入元素)。在第一部分排序完成後,再將這個最後元素插入到已排好序的第一部分中。排序的基本思路是:每步將一個待排序的記錄,按其關鍵碼值的大小插入前面已經排序的檔案中適當位置上,直到全部插入完為止。通俗的說:從一組數第一個元素開始,將陣列分為有序序列和無序序列,每迴圈一次,無序序列的一個元素插入到有序序列中,有序序列增加一,直至無序序列元素全部存在於有序序列中。

演算法原理:

     1. 設定判別條件(確定規則:從小到大或從大到小)。

     2. 確定有序序列和無需序列。

     3. 迴圈將無序序列插入到有序序列中,組成新的有序序列。

     4. 直到最後一個元素。

演算法實現:

#插入排序
def Insert_Sort(list2):
    for i in range(1,len(list2)): #從第二個元素開始
        for j in range(i,0,-1):
          if list2[j] < list2[j-1]:#判斷是否為交換,如果前者大於後者,則交換
              print(list2)
              list2[j],list2[j-1] = list2[j-1],list2[j]
    print('插入排序:', end=' ')
    print(list2)
#主函式
if __name__ =='__main__':
    List_value =np.random.randint(200, size=10)
    print('隨機列表:',end = '')
    print(List_value)
    #氣泡排序
    #Bubble_Sort(List_value)
    # 選擇排序
    # Selection_Sort(List_value)
    # 插入排序
    Insert_Sort(List_value)

效果顯示:


時間複雜度:

如果把n個元素的序列升序排列,那麼採用插入排序存在最好情況和最壞情況。最好情況就是,序列已經是升序排列了,在這種情況下,需要進行的比較操作需(n-1)次即可。最壞情況就是,序列是降序排列,那麼此時需要進行的比較共有n(n-1)/2次。插入排序的賦值操作是比較操作的次數加上 (n-1)次。平均來說插入排序演算法的時間複雜度為O(n^2)。因而,插入排序不適合對於資料量比較大的排序應用。

 

演算法穩定性:

           插入排序是在有序序列的基礎上,一次插入一個元素。當然,剛開始這個有序的小序列只有1個元素,就是第一個元素。比較是從有序序列的末尾開始,也就是想要插入的元素和已經有序的最大者開始比起,如果比它大則直接插入在其後面,否則一直往前找直到找到它該插入的位置。如果碰見一個和插入元素相等的,那麼插入元素把想插入的元素放在相等元素的後面。所以,相等元素的前後順序沒有改變,從原無序序列出去的順序就是排好序後的順序,所以插入排序是穩定的。