• Python插入排序(2)


    Python代码:

    """
    插入排序(2)希尔排序、Shell排序
    
    1)确定初始步长
    2)按步长将待排序的数进行分组
    3)每个分组采用直接插入排序
    不断缩小步长,当步长缩小为1时,排序结束。
    
    步长的缩小规律如下:
    N / 2 = n1
    n1 / 2 = n2
    n2 / 2 = n3
    ....
    当n变成1时,被分为1组,算法终止
    
    """
    
    # 希尔排序
    def shellSort(lst):
        s = len(lst)//2 # 初始步长,地板除获取整数部分
        while s >= 1:
            for i in range(0, s): # 步长s,即可以分为s个数组
                sublist = []
                j = i
                while j<len(lst): # 生成各分组的数
                    sublist.insert(0, lst[j])
                    j = j+s
                sublist = insertSort(sublist) # 各分组直接插入排序
                j = i
                for k in range(len(sublist)): # 对各分组的数排序
                    lst[j] = sublist[k]
                    j = j+s
            s = s//2 # 缩小步长
            print("希尔排序后:%s" % lst)
    
    
    # 直接插入排序
    def insertSort(lst):
        for i in range(1,len(lst)): # 未排序的数组
            #
            for j in range(i): # 已排序的数组(初始假设第一个数已排序)
                if lst[i] <= lst[j]:
                    lst.insert(j, lst[i])
                    lst.pop(i+1)
                    break
        return lst
    
    if __name__ == "__main__":
        lst = [3, 6, 9, 1, 4, 7, 2, 8, 5, 0]
        print("排序前: %s
    " %lst)
        shellSort(lst)
        print("
    排序后: %s" % lst)

    输出结果:

    E:pythonalgorithm>python3 insertSort2.py
    排序前: [3, 6, 9, 1, 4, 7, 2, 8, 5, 0]
    
    希尔排序后:[3, 2, 8, 1, 0, 7, 6, 9, 5, 4]
    希尔排序后:[0, 1, 3, 2, 5, 4, 6, 7, 8, 9]
    希尔排序后:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    排序后: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    =====结束=====

  • 相关阅读:
    2019-12-18
    java读取XML文件,及封装XML字符串
    java不用中间变量交换两个值
    oracle获取当前月的第一个星期五
    2019-10-23
    HTTP中GET请求与POST请求的区别
    Java面试题整理(转载)
    java 字节流与字符流的区别
    20190822
    C++标准库string
  • 原文地址:https://www.cnblogs.com/sam11/p/8377399.html
Copyright © 2020-2023  润新知