希尔排序

希尔排序是插入排序的一种,也叫缩小增量排序,是直接插入排序的改进,是一种非稳定的排序算法
他交换的是不相邻的元素已对数组进行局部排序,首先需设置一个增量step一般为length/2,他先使数组中任意间隔为step的元素有序,遍历一遍之后,把增量除二,得到新的增量,再重复以上的步骤

在这里插入图片描述

public static int[] shellSort(int[] a){
	int length=a.length;
	for(int step=length/2;step>0;step/=2){//希尔增量
		//双层for循环只是为了确保遍历完增数为step的局部元素
		for(int i=step;i<length;i++){
		    // 第一次step大,只需要比较一次,接下来step会越来越小,会比较多次,比如说step=2 j=0,那么需要比较0,2,4,6位的数,这里比较像冒泡,需要相邻的挨个比较
			for(int j=i;j>=step&&a[j]<a[j-step];j-=step){
				int temp=a[j];
				a[j]=a[j-step];
				a[j-step]=temp;
			}
		}
	}
	return a;
}

比较希尔排序和直接插入排序不难发现,直接插入排序适用于中小型规模的数组,且最好局部有序,而希尔排序适用于规模较大的无序数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值