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個元素,就是第一個元素。比較是從有序序列的末尾開始,也就是想要插入的元素和已經有序的最大者開始比起,如果比它大則直接插入在其後面,否則一直往前找直到找到它該插入的位置。如果碰見一個和插入元素相等的,那麼插入元素把想插入的元素放在相等元素的後面。所以,相等元素的前後順序沒有改變,從原無序序列出去的順序就是排好序後的順序,所以插入排序是穩定的。