希尔排序

public static void myShellSort(int[] array){
    int gap=array.length/2;//希尔排序的间距,如果间距为2,那么0,2,4,6,8,10...元素就认为是一个数组,1,3,5,7,9..也认为是一个新数组。
    // 就是用来切分数组的,为什么这样做去百度百科看下吧,人家讲的比我好
    do{
        for(int i=0;i<gap;i++){//分解数组,因为间距为gap,所以这些子数组的头下标为0~gap,里面就是一个直接插入排序
            for(int j=i+gap;j<array.length;j=j+gap){//这就是一个插入排序,只不过是有间距为gap组成的数组内完成的
                int key=array[j];//待插入的元素
                int preIndex=j-gap;//待插入元素的前一个元素的下标
                while(preIndex > -1 && key < array[preIndex]){
                    array[preIndex+gap]=array[preIndex];
                    preIndex -= gap;
                }
                array[preIndex+gap]=key;
            }
        }
        gap /= 2;
    }while (gap>1);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值