算法學習:直接插入排序
1、插入排序核心思想
插入排序的核心思想是將數組中所有的元素和前面已經排序好的元素相比較。
如果后面選擇的元素比排序的元素小,則交換位置,直到比較完成。
2、插入排序過程舉例
arr = [1,22,-1,9,23,5]
思路,將一個數字插入到有序部分,對比;找到插入位置;插入。
1)將數組分成兩部分
-有序部分 [1]
-無序部分 [22,-1,9,23,5]
2)取無序部分的第一個元素插入到有序部分去
-有序部分 [1,22]
-無序部分 [-1,9,23,5]
3)重復步驟2
-有序部分 [-1,1,22]
-無序部分 [9,23,5]
4)重復步驟2
-有序部分 [-1,1,9,22]
-無序部分 [23,5]
5)重復步驟2
-有序部分 [-1,1,9,22,23]
-無序部分 [5]
6)重復步驟2
-有序部分 [-1,1,5,9,22,23]
-無序部分 []
3、代碼
#方法1,從后往前,逐個比較 def insertSort(arr): for i in range(1,len(arr)):#若有n個元素,n-1個數需要比較 for j in range(i,0,-1):#從第i個元素開始,從后往前比較(實際從索引1開始比) if arr[j]<arr[j-1]:#如果比前一個數小,交換位置 arr[j],arr[j-1]=arr[j-1],arr[j] else:#否則結束此次循環 break return arr print(insertSort([1,22,-1,9,23,5])) #[-1, 1, 5, 9, 22, 23]
時間復雜度:O(n^2)
#方法2: def insertSort02(arr): i = 1 while i<len(arr):#若有n個數字,比較n-1次 j = i #從索引為1的元素開始比較 while j>=1: if arr[j]<arr[j-1]:#若當前元素比前一個元素小,交換位置 arr[j],arr[j-1]=arr[j-1],arr[j] j-=1 #接下來比較前一個元素 else: break i+=1#繼續比較下一輪 return arr print(insertSort02([1,22,-1,9,23,5])) #[-1, 1, 5, 9, 22, 23]
浙公網安備 33010602011771號