• 数据结构和算法-排序算法-希尔排序


     ##################     希尔排序        ########################

    """
    
    希尔排序
    希尔排序就是插入排序的一种改进版本,
    
    算法的步骤
    把一个序列不视为一个整体,而是视为多个子序列,
    假设间隔是gap=4
    alist = [54,26,93,17,77,31,44,55,20]
    54,26,93,17,77,31,44,55,20
    54          77          20  这是1 组,间隔是4,
       26          31           这是2 组,间隔是4,
          93          44        这是3 组,间隔是4,
             17          55     这是4 组,间隔是4,
    
    然后对每一组进行插入算法的排序,
    [54  77  20],认为54是第一个,然后后面的每一个去和前面比较,进行插入,--------[20  54   77 ]
    
    全部都排序完成之后,再次合并成为一个序列,
    然后变化间隔, 比如是gap = 2,再次进行插入算法的排序,
    
    进行之后还是再次合并成为一个整体序列
    再次调整gap,比如gap=1 ,然后再次排序,直到排序完成,
    
    
    
    """

    ##################     希尔排序        ########################

    
    # 第一版:
    def shell_sort(alist):
        n=len(alist)
        gap = n //2
        while gap > 0 :
            # 这个最外层的循环是控制gap的,越来越小,
            for j in range(gap,n):
                i = j
                while i>0:
                    if alist[i] < alist[i - gap]:
                        alist[i], alist[i - gap] = alist[i - gap], alist[i]
                        i -= gap
                    else:
                        break
            # 缩短gap步长,
            gap //=2
    
    # 第二版:
    def shell_sort2(alist):
        n = len(alist)
        # 初始步长
        gap = n // 2
        while gap > 0:
            # 按步长进行插入排序
            for i in range(gap, n):
                j = i
                # 插入排序
                while j>=gap and alist[j-gap] > alist[j]:
                    alist[j-gap], alist[j] = alist[j], alist[j-gap]
                    j -= gap
            # 得到新的步长
            gap = gap / 2
    
    if __name__ == '__main__':
    
        alist = [54,26,93,17,77,31,44,55,20]
        shell_sort(alist)
        print(alist)
  • 相关阅读:
    决策树算法
    数据挖掘建模-Logistic回归
    Python数据结构与算法-栈和递归函数
    使用python自动化生成软件著作权的源代码
    一起玩转图论算法(1)图的基本表示
    全网最最最详细的软件著作权申请步骤
    时间序列模式(ARIMA)---Python实现
    宝塔面板怎样部署SSL证书?
    Linux基础概念入门
    转载:VMware workstation创建虚拟机,安装Ubuntu系统
  • 原文地址:https://www.cnblogs.com/andy0816/p/12348381.html
Copyright © 2020-2023  润新知