八大排序之(三)希尔排序

希尔排序

希尔排序又叫缩小增量排序,是通过对待排序数组分成多个部分,然后分别采用插入排序。
本例首先将数增量gap初值为length/2,这样原数组就被分成gap个数组,每个数组有两个数。
然后对每个数组进行插入排序,接着逐渐缩小增量(本例中gap=gap/2),继续排序直到增量为1结束。
希尔排序最好情况时间复杂度为O(n),最坏情况O(n²),是不稳定的。

public class Shellsort {

    public static int[] sort(int[] nums){
        int gap;
        int j;
        //增量逐渐减小
        for (gap=nums.length/2;gap>0;gap=gap/2){
        	//从i=gap开始,即每个分数组第一个要插入的数开始
            for (int i=gap;i<nums.length;i++){
            	//记录当前要插入的数
                int temp = nums[i];
                for (j=i;j>=gap&&temp<nums[j-gap];j-=gap){
                	//若要插入的数小于,nums[j],将分数组的往后移,插入位置往前移
                    nums[j] = nums[j-gap];
                }
                //向当前插入位置插入数
                nums[j] = temp;
            }
        }
        return nums;
    }
    public static void main(String[] args) {
        int[] nums = {7,6,5,4,3,2,1,4,5,3,2,6,88,4,3,2,6,32,45,1,1,1,1,1,1,1,1,3,3,2,3,2,3,2};
        nums = sort(nums);
        for (int num : nums) {
            System.out.println(num);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值