写一下希尔排序

public class MergeSortTest {
    public static void main(String[] args) {
        int[] arr ={4,7,3,5,6,2,8,1};
        shellSort(arr);
        System.out.println(Arrays.toString(arr));
    }

    /**
     * 希尔排序就是通过每次算出不同的间距,
     * 然后按照这个间距进行插入排序
     * 像该例子中的第一轮是4间距,
     * 那么就分别对下标分别为
     * 0 4
     * 1 5
     *  2 6
     *  3 7
     *  四组进行插入排序
     * 接着进行下一轮间距为2
     * 最后间距为1
     * 最终完成排序
     * @param data
     */
    public static void shellSort(int[] data){
        int len =  data.length;
        for(int add = len/2;add>0;add=add/2){
            for(int i=add;i<len;i++){
                int item =  data[i];
                int j=i-add;
                for(;j>=0;j-=add){
                    if(data[j]>item){
                        data[j+add]=data[j];
                    }else{
                        break;
                    }
                }
                data[j+add] = item;
            }
        }
    }
}

  

posted @ 2021-12-06 10:05  Kyhoon  阅读(9)  评论(0编辑  收藏  举报