Algorithms - Insertion Sort - 插入排序

2021-01-19 00:25

阅读:1156

标签:ima   span   pytho   after   结果   class   src   img   pre   

 

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 [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] # 最终排序结果

技术图片

 

Reference

  1. Introduction algorithms

Algorithms - Insertion Sort - 插入排序

标签:ima   span   pytho   after   结果   class   src   img   pre   

原文地址:https://www.cnblogs.com/zzyzz/p/12910133.html


评论


亲,登录后才可以留言!