希尔排序

2020-02-28  本文已影响0人  桑鱼nicoo
原始数组:[ 13 14 94 33 82 25 59 94 65 23 45 27 73 25 39 10 ]

以步长为8 进行排序
13 14 94 33 82 25 59 94 
65 23 45 27 73 25 39 10

对每列进行排序
13 14 45 27 73 25 39 10 
65 23 94 33 82 25 59 94

合并上述4行数字,依序接在一起得到
[ 13 14 45 27 73 25 39 10 65 23 94 33 82 25 59 94 ]

以步长为4 进行排序
13 14 45 27
73 25 39 10
65 23 94 33
82 25 59 94

排序之后变为:
13 14 39 10
65 23 45 27
73 25 59 33
82 25 94 94

合并上述4行数字,依序接在一起得到
[ 13 14 39 10 65 23 45 27 73 25 59 33 82 25 94 94]

以步长为2 进行排序
13 14
39 10 
65 23
45 27
73 25 
59 33
82 25
94 94

排序之后变为:
13 10
39 14
45 23
59 25
65 25
73 27 
82 33 
94 94

合并上述4行数字,依序接在一起得到
[13 10 39 14 45 23 59 25 65 25 73 27 82 33 94 94]

最后以1步长进行排序(此时就是简单的插入排序了)
public class MyTest01 {
    public static int[] shellSort(int[] arr) {
        int length = arr.length;
        int temp;
        for (int step = length / 2; step >= 1; step /= 2){
            for(int i = step;i < length;i++){
                temp = arr[i];
                int j = i - step;
                while (j >= 0 && arr[j] > temp){
                    arr[j + step] = arr[j];
                    j -= step;
                }
                arr[j + step] = temp;
            }
        }
        return arr;
    }

    public static void main(String[] args) {
        int[] arr = {13,14,94,33,82,25,59,94,65,23,45,27,73,25,39,10};
        System.out.println(Arrays.toString(shellSort(arr)));
    }
}
上一篇下一篇

猜你喜欢

热点阅读