排序算法之希尔排序

排序原理

1、选定一个增长量h,按照增长量h作为数据分组的依据,对数据进行分组。

2、对分好组的每一组数据完成插入排序。

3、减小增长量,最小减为1,重复第二步操作。

增长量h的确定:增长量h的值每一固定的规则,采用以下规则:

int h =1;
while(h<数组的长度/2){
    h = 2h +1;
}
//循环结束后就可以确定h的最大值

//h的减小规则为:
h =h/2

代码示例

public static void main(String[] args) {
		int[] arr = {2,5,4,6,11,32,3,8,21,14,26};

		//根据数组长度,计算得到h的初始值
		int h =1;
		while (h<arr.length/2){
			h = 2*h +1;
		}

		while (h>=1){
			for (int i=h;i<arr.length;i++){
				for (int j = i;j> h; j -= h){
					if (arr[j-h] > arr[j]){
						int temp = arr[j];
						arr[j] = arr[j-h];
						arr[j-h] = temp;
					}else {
						break;
					}
				}
			}
			h = h/2;
		}

		System.out.println(Arrays.toString(arr));
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值