zoukankan      html  css  js  c++  java
  • 直接插入排序

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

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

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

    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)
    
    
  • 相关阅读:
    小程序支付
    小程序传参
    git
    学习过程遇到问题的解决方法
    进程创建注意事项:函数及对应包
    进程创建:函数及对应包
    mac解决eclipse 端口占用问题
    暴力
    doc2vec
    Java正则表达式的解释说明
  • 原文地址:https://www.cnblogs.com/rprp789/p/9520296.html
Copyright © 2011-2022 走看看