• 直接插入排序


    在未排序的序列中,构建子序列,直至全部排完

    将待排数,插入已经排序的合适的位置

    增加哨兵,放入待比较的值,和以排序的序列比较,找到合的插入点

    def inster_sort(*args):
        lst1 = list(args)
        nums = [0]+lst1###增加哨兵
        length = len(nums)
        
        count_swap = 0###记录交换次数
        count_iter = 0###记录循环次数
        
        for i in range(2,length):
            nums[0] = nums[i]
            j = i-1
            count_iter +=1
            while True:
                if nums[0] < nums[j]:
                    nums[j+1] = nums[j]##大数后移
                    count_swap +=1
                else:
                    nums[j+1] = nums[0]##定位
                    break
                j -= 1
        print(nums,count_swap,count_iter)
    inster_sort(*[9,8,7,6,5,4,3,2,1])
    [1, 1, 2, 3, 4, 5, 6, 7, 8, 9] 36 8

    inster_sort(*[1,9,8,5,6,7,4,3,2])
    [2, 1, 2, 3, 4, 5, 6, 7, 8, 9] 25 8

    inster_sort(*[1,1,1,1,1,1,1,1,1])
    [9, 1, 2, 3, 4, 5, 6, 7, 8, 9] 0 8
    inster_sort(*[1,1,1,1,1,1,1,1,2])
    [2, 1, 1, 1, 1, 1, 1, 1, 1, 2] 0 8
    

    对于9个数,最好情况比较36次,交换0次
    最差情况,比较36次,交换36次。
    (n-1)!*(n-1)!
    时间复杂度O(n)
    
    
  • 相关阅读:
    事务 ~ 锁
    JDBC
    C# ~ 由 IDisposable 到 GC
    C# ~ 泛型委托
    函数式编程
    反射
    测试初识
    C# ~ 从 委托事件 到 观察者模式
    C# ~ 从 IEnumerable / IEnumerator 到 IEnumerable<T> / IEnumerator<T> 到 yield
    Java初识
  • 原文地址:https://www.cnblogs.com/rprp789/p/9520296.html
Copyright © 2020-2023  润新知