Algorithms - Insertion Sort - 插入排序
2021-01-19 00:25
标签:ima span pytho after 结果 class src img pre Python Programming Reference 1. Introduction algorithms Algorithms - Insertion Sort - 插入排序 标签:ima span pytho after 结果 class src img pre 原文地址:https://www.cnblogs.com/zzyzz/p/12910133.htmldef insertion_sort(A):
print(‘Before: ‘,A)
for j in range(1,len(A)):
print(‘Step ‘, j)
key = A[j]
i = j - 1
print(111, i, j, A[i], key)
while i >= 0 and A[i] > key:
print(222, i, j, A[i], key)
A[i+1] = A[i]
i -= 1
print(333, i, j, A[i], key)
A[i+1] = key
print(A)
print(‘After: ‘,A)
if __name__ == ‘__main__‘:
insertion_sort([5, 2, 4, 6, 1, 3])
结果打印:
Before: [5, 2, 4, 6, 1, 3]
Step 1 # 先取出元素 5 和 2 进行处理
111 0 1 5 2
222 0 1 5 2 # 满足 while 循环条件, 由于 5 > 2, 将 5 放在 A[1](while 循环内 A[i+1] = A[i]);
# 把 2 放到 A[0](while 循环外 A[i+1] = key))
333 -1 1 3 2 # 由于 i = -1
[2, 5, 4, 6, 1, 3] # 处理完元素 5 和 2 后的中间结果
Step 2 # 处理元素 5 和 4 (中间结果的 A[1] 和 A[2])
111 1 2 5 4
222 1 2 5 4
333 0 2 2 4 # 因为 2 key, 退出
[2, 4, 5, 6, 1, 3] # 处理完元素 5 和 4 后的中间结果
Step 3 # 处理元素 5 和 6 (中间结果的 A[2] 和 A[3])
111 2 3 5 6
333 2 3 5 6 # 因为 5 key)
[2, 4, 5, 6, 1, 3] # 处理完元素 5 和 6 后的中间结果
Step 4 # 处理元素 6 和 1 (中间结果的 A[3] 和 A[4])
111 3 4 6 1
222 3 4 6 1 # 6 > 1, 进入 while 循环, 并且 i -= 1
222 2 4 5 1 # 5 > 1 , 5 是 6 之前的一个元素 i -= 1
222 1 4 4 1 # 4 > 1 , 4 是 5 之前的一个元素 i -= 1
222 0 4 2 1 # 2 > 1 , 2 是 4 之前的一个元素 i -= 1
333 -1 4 3 1 # 由于 i = -1
[1, 2, 4, 5, 6, 3] # 处理完元素 6 和 1 后的中间结果
Step 5 # 处理元素 6 和 3 (中间结果的 A[4] 和 A[5])
111 4 5 6 3
222 4 5 6 3 # 6 > 3, 进入 while 循环, 并且 i -= 1
222 3 5 5 3 # 5 > 3 , 5 是 6 之前的一个元素 i -= 1
222 2 5 4 3 # 4 > 3 , 4 是 5 之前的一个元素 i -= 1
333 1 5 2 3 # 2
[1, 2, 3, 4, 5, 6] # 处理完元素 6 和 3 后的中间结果
After: [1, 2, 3, 4, 5, 6] # 最终排序结果
文章标题:Algorithms - Insertion Sort - 插入排序
文章链接:http://soscw.com/index.php/essay/43868.html