zoukankan      html  css  js  c++  java
  • 希尔排序

    希尔排序算是插入排序的一种,也被称为缩小增量排序和分组插入排序。

    希尔排序的最优时间复杂度为O(nlogn),递归的时间复杂度为O(logn),最坏时间复杂度为O(n**2)。

    def shellsort(alist):
        n=len(alist)
        if n<=1:
            return alist
        # 分组需要的下标偏移量
        gap=n//2
        # 偏移量必须大于等于一保证组内的元素个数不为0
        while gap>=1:
            for i in range(gap,n):
                while (i-gap)>=0:
                    if alist[i]<alist[i-gap]:
                        alist[i],alist[i-gap]=alist[i-gap],alist[i]
                        # 当进行元素替换后将左组元素的下标赋值给右组元素
                        i=i-gap
                    else:
                        break
            # 递归分组
            gap=gap//2
        return alist
    if __name__ == '__main__':
        alist=[77,26,93,55,54,31,44,17]
        print(shellsort(alist))
  • 相关阅读:
    Vue
    Vue
    Vue
    Vue
    Vue
    kubernetes
    kubernetes
    kubernetes
    django源码bug解决方案
    UNI-APP 桌面LOGO角标设置(ios)
  • 原文地址:https://www.cnblogs.com/zhangweijie01/p/10229817.html
Copyright © 2011-2022 走看看