Shell Sort介绍及其Python实现

— 以下内容来自维基百科的介绍,本博客只作为一个摘要笔记。

希尔排序,又称递减增量排序算法,是插入排序的高校改进版本,输入非稳定排序算法。希尔排序是针对插入排序的两点性质提出改进方法的:

  1. 插入排序对于已经排序好的数据操作效率很高,几乎达到线性排序的效率;
  2. 但是每次只能将数据移动一位,因此来说是低效的。

希尔排序的时间复杂度和步长的选择有关,最坏情况下的时间复杂度为 o ( n log ⁡ 2 n ) o(n\log ^2n) o(nlog2n),比最好的比较算法的 O ( n log ⁡ n ) O(n\log n) O(nlogn) 要差一点。步长序列的改进是提高时间复杂的关键,已知最好的补偿序列是 ( 1 , 5 , 19 , 41 , 109 , . . . ) (1,5,19,41,109,...) (1,5,19,41,109,...) 。用这样序列的希尔排序在小数组排序中比快速排序和堆排序还要快,但是大量数据时,仍然比快排要慢。
希尔排序通过将比较的元素分为几个区域来提升插入排序的性能,可以让一个元素一次性的朝最终位置前进一大步,然后算法再取越来越小的步长进行排序,算法的最后,当步长为1的时候,就是简单的插入排序了,此时,需要排序的数据基本已经是排好的了。
希尔排序的Python实现如下,代码亦来自维基百科:

def ShellSort(array):
    n = len(array)
    gap = n//2
    while gap>0:
        for i in range(gap,n): # 从 gap开始到 n
            key = array[i]
            while i>gap and array[i-gap]>key:
                array[i] = array[i-gap]
                i -= gap
            array[i] = key
        gap //= 2
    return array

你可能感兴趣的:(Sort,Algorithm)