希尔排序简单解析(Java实现)

       希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因 D.L.Shell 于 1959 年提出而得名。

        希尔排序通过加入一个”增量“来使交换次数减少,我们先看算法相关的图解,随后再附上代码:

希尔排序简单解析(Java实现)_第1张图片

因为进行比较两数的索引之差为h,循环体部分应为:

for (int i = h; i < a.length; i++) {
                for (int j = i; j >= h; j-=h) {
                    //待插入值a[j]
                    if (a[j]

else部分是在已经排序好的情况下去跳出内部的一个for循环达到减少比较次数的效果,

希尔排序并不难,只是插入排序的优化版,下面附上一个动图更有利于理解该算法:

希尔排序简单解析(Java实现)_第2张图片

 

下面我们附上完整代码:

import java.util.Arrays;

public class ShellSort {
    public static void main(String[] args) {
        int[] a = {9,1,2,5,7,4,8,6,3,5};
        System.out.println("--------排序前数组a--------");
        System.out.println(Arrays.toString(a));
        int h = a.length/2;
        while (h>=1) {
            for (int i = h; i < a.length; i++) {
                for (int j = i; j >= h; j-=h) {
                    //待插入值a[j]
                    if (a[j]

运行结果为:

希尔排序简单解析(Java实现)_第3张图片

 

空间复杂度为O(n^(3/2)) 其证明留到下次在详解~

欢迎大家多多评论,提出自己的意见和疑问~

你可能感兴趣的:(java,排序算法,算法)