美文网首页
希尔排序

希尔排序

作者: 桑鱼nicoo | 来源:发表于2020-02-28 12:57 被阅读0次
    原始数组:[ 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)));
        }
    }
    

    相关文章

      网友评论

          本文标题:希尔排序

          本文链接:https://www.haomeiwen.com/subject/yidffhtx.html