希尔排序

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

希尔排序的最优时间复杂度为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))

 

posted @ 2019-01-06 18:41  名字到底要多长  阅读(173)  评论(0编辑  收藏  举报