看了那麼多插入排序,解釋一下這個方法。
分如下幾個步驟:
1 認爲前面的數列已經完成排序,即按照從小到大的順序,最大的在最後面
2 將接下來要排列的數a[i]存入一個變量中,a[i] = data。即在 i 這個位置挖了一個坑。
3 從已經排序的數組a[j]的末尾開始,即從最大值a[j] 開始,data不太老實,想通過 j 遍歷排列好的部分,找到比自己大的數,然後讓他們依次填坑。如果data大,則循環結束,data乖乖回到原來的坑;如果data小,則a[j]往後移動一位填那個坑,然後再空出自己的位置成爲新的坑:a[j+1] = a[j]。每輪比較 j-- ,直到 j < 0,或者data回到坑中。
4 循環結束後a[j] 的值是小於新來的值的,則a[j+1]的位置上的值就是新來的值data了:a[j+1] = data。
整個的代碼如下:
def Insert_sort(a): for i in range(1,len(a)): data = a[i] #先挖一個坑 j = i - 1 while j >= 0 and a[j] > data: #data看是不是比自己大 a[j+1] = a[j] #是的話,就讓那個值往後填坑, a[j+1]永遠是data挖的坑 j = j-1 #接着下一個 a[j+1] = data #比較結束了,data回到自己剛挖的坑中 return a