希尔排序

    技术2022-07-11  95

    目录

    一 基本思想二 例子三 时间复杂度

    一 基本思想

    希尔排序的实质就是分组插入排序,该方法又称缩小增量排序。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,再对全体记录做一次插入排序。

    二 例子

    private void ShellSort(int[] array) { int length = array.Length; for (int gap = length / 2; gap > 0; gap /= 2) //确定增量序列 假设 length = 10, gap = 5, 2, 1 { for (int i = gap; i < length; i++) //直接插入排序 { int temp = array[i]; int j; for (j = i - gap; j >= 0 && array[j] > temp; j -= gap) { array[j + gap] = array[j]; } array[j + gap] = temp; } } }

    三 时间复杂度

    希尔排序的时间复杂度,与增量序列有关。如:例子的增量序列是{1, 2, 4 …}, 最坏 情况的时间复杂度是 O(n²)。Hibbard提出了另一个{1,3,7,…,2^k-1},这种序列的最坏情况的时间复杂度是 O(n^1.5)。Sedgewick提出了几种增量序列,其最坏情形运行时间为O(n^1.3),其中最好的一个序列是{1,5,19,41,109,…}
    Processed: 0.012, SQL: 9