日常算法——希尔排序

本贴最后更新于 2570 天前,其中的信息可能已经水流花落

希尔排序

希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因 DL.Shell 于 1959 年提出而得名。
该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。
如图:
希尔排序

代码实现

package Suanfa;

/**
 * Created by hushangjie on 2017/11/8.
*/
public class ShellSort {
    public static void sort(int[] arr) {
        int temp;
        for (int k = arr.length / 2; k > 0; k /= 2) {
            for (int i = k; i < arr.length; i++) {
                for (int j = i; j >= k; j -= k ){
                    if (arr[j - k] > arr[j]) {
                        temp = arr[j-k];
                        arr[j-k] = arr[j];
                        arr[j] = temp;
                    }
                }

            }

        }
    }

    public static void main(String[] args) {
        int[] a = {23, 22, 1, 4, 555, 90};
        sort(a);
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }
    }
}

特点

希尔排序使用了一种增量的方式去改进插入排序,所以希尔排序会比插入排序快一些,但是希尔排序是不稳定算法,时间复杂度为 O(n^1.3)。

  • 算法
    428 引用 • 254 回帖 • 24 关注
  • 排序
    19 引用 • 16 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...