插入排序的改进:希尔排序
def shell_sort(ary): n = len(ary) gap = n//2 # 初始步长 , 取整 while gap > 0 : for i in range(gap,n): # 每一列进行插入排序 , 从gap 到 n-1 (每次都只交换两个数) temp = ary[i] # 在后面的数,ary[j-gap]在前面的数 j = i if ary[j-gap] > temp: ary[j] = ary[j - gap] ary[j - gap] = temp gap = round(gap/2) # 重新设置步长 return ary
时间复杂度::
平均:O(nlog(n))
最坏:O(nlog(n)) # 倒序
空间复杂度:O(1)
稳定性:不稳定