zoukankan      html  css  js  c++  java
  • Algorithms

    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

  • 相关阅读:
    Tapestry AppModule中的方法
    Tapestry Grid
    Tapestry5之AutoLoading Module
    Tapestry Submits
    Tapestry SubmitLink
    再读Struts2之一:总括
    Java war包取之外的properties文件
    用ORACLE的高级复制实现内外网数据同步【转】
    在Oracle中实现数据库的复制
    解决ORA12560: TNS: 协议适配器错误
  • 原文地址:https://www.cnblogs.com/zzyzz/p/12910133.html
Copyright © 2011-2022 走看看