Algorithms - Insertion Sort - 插入排序
Posted zzyzz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Algorithms - Insertion Sort - 插入排序相关的知识,希望对你有一定的参考价值。
Python Programming
def 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 < 0 退出 while 循环 [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 < 4 不满足 while 循环 A[i] > 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 < 6 不进行 while 循环 (A[i] > 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 < 0 退出 while 循环 [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 < 3 , 2 是 4 之前的一个元素, 不满足 while 循环 [1, 2, 3, 4, 5, 6] # 处理完元素 6 和 3 后的中间结果 After: [1, 2, 3, 4, 5, 6] # 最终排序结果
Reference
1. Introduction algorithms
以上是关于Algorithms - Insertion Sort - 插入排序的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode之 insertion-sort-list && insertion-sort-list
#Leetcode# 147. Insertion Sort List