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

147. Insertion Sort List

Insertion 插入排序算法

#Leetcode# 147. Insertion Sort List

Spring Data JPA Batch Insertion

插入排序算法(insertion-sort)