1.偽代碼
'''INSERTION-SORT(A)'''
for j = 2 to A.length
key = A[j]
//Insert A[j] into the sorted sequence A[1..j-1]
i = j - 1
while i > 0 and A[i] > key
A[i+1] = A[I]
i = i - 1
A[i+1] = key
算法流程圖示
2.Python代碼
def insertion_sort(A):
for j in range(1, len(A)):
key = A[j]
# Insert A[j] into the sorted sequence A[1..j-1]
i = j - 1
while i >= 0 and A[i] > key:
A[i+1] = A[I]
i = i - 1
A[i+1] = key
return A
result:
Before:
[29, 76, 65, 27, 75, 81, 1, 44, 77, 61]
After:
[1, 27, 29, 44, 61, 65, 75, 76, 77, 81]
循環不變性:
- 初始化: 循環的第一次迭代之前,他為真.
- 保持: 如果循環的某次迭代之前為真, 下次迭代之前仍為真
- 終止: 循環終止時,不變式提供一個有用的性質證明算法的正確性
對于插入排序算法:
- 初始化: 循環之前,排序好的數組即原數組第一個數字,為單個元素A[1]
- 保持: 每次循環,排序好的數組中比要插入的數大的右移,循環結束,插入數字,對于下一次循環來說子數組仍是有序的
- 終止: 導致終止的條件是 j > A.length, 終止后,原數組的數字都已插入字數組,且是有序的,所以算法正確
歡迎關注我的博客Vagitus – Pythonista