排序算法(二)希尔排序

来源:互联网 发布:another mysql daemon 编辑:程序博客网 时间:2024/06/05 11:01

希尔排序(Shell Sort)

介绍 :

希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。

希尔插入排序代码实现(java)

public static int[] shellSort(int[] a) {        if (a == null || a.length < 2) {            return a;        }        // 希尔排序        int d = a.length;        while (true) {            d = d / 2;            for (int x = 0; x < d; x++) {                for (int i = x + d; i < a.length; i = i + d) {                    int temp = a[i];                    int j;                    for (j = i - d; j >= 0 && a[j] > temp; j = j - d) {                        a[j + d] = a[j];                    }                    a[j + d] = temp;                }            }            if (d == 1) {                break;            }        }        return a;    }

希尔排序过程动画:

“`这里写图片描述

性能分析:

时间复杂度:
希尔排序的时间复杂度与增量序列的选取有关,例如希尔增量时间复杂度为O(n²),而Hibbard增量的希尔排序的时间复杂度为O( 这里写图片描述 ),希尔排序时间复杂度的下界是n*log2n。
空间复杂度:
O(1)

稳定性:
不稳定

总结:

希尔排序没有快速排序算法快 O(n(logn)),因此中等大小规模表现良好,对规模非常大的数据排序不是最优选择。但是比O( 这里写图片描述 )复杂度的算法快得多。并且希尔排序非常容易实现,算法代码短而简单。 此外,希尔算法在最坏的情况下和平均情况下执行效率相差不是很多,与此同时快速排序在最坏的情况下执行的效率会非常差。

原创粉丝点击