希尔排序
希尔排序算是插入排序的一种,也被称为缩小增量排序和分组插入排序。
希尔排序的最优时间复杂度为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))