算法-希尔排序

2018/04/04 算法 希尔排序 Java
  本文为「原创」内容,如需转载请注明出处!             
本文共 754 字,需 9 分钟阅读
  1. 算法可视化:连接
  2. 时间复杂度,平均:\(O(n^{1.5})\),最好:\(O(n)\),最坏:\(O(n^2)\)
  3. 空间复杂度,\(O(1)\)
  4. 是否稳定:不稳定
  5. 图片来源:https://www.cnblogs.com/chengxiao/p/6104371.html

算法思想

  1. 希尔排序是把记录按下标的一定增量分组,对每组采用插入排序算法
  2. 增量每次递减一半,当增量为 1 的时候整个数组恰好为一组,算法终止
  3. 默认增量采用 array.length/2

算法过程

shell-sort

实现

    public void sort(int[] array) {
        for (int gap = array.length / 2; gap > 0; gap /= 2) {
            for (int i = gap; i < array.length; i++) {
                int j = i;
                while (j - gap >= 0 && array[j] < array[j - gap]) {
                    swap(array, j, j - gap);
                    j -= gap;
                }
            }
        }
    }

    public void swap(int[] array, int i, int j) {
        int tmp = array[i];
        array[i] = array[j];
        array[j] = tmp;
    }

搜索

    文章目录