高级排序算法->希尔排序(Shell)

在这里插入图片描述
在这里插入图片描述
采用事后分析方法后得出结论,shell排序在数据量庞大时比插入排序更为优异,性能更好;但稳定性不行

package day02;


public class Shell {

	public static void sort(Comparable[] array){
		//1.根据数组array的长度确定增长量h的初始值
		int h=1;
		while(h<array.length/2){
			h=2*h+1;
		}
		//2.根据h的值进行排序
		//h>=1时进行排序
		while(h>=1){
			//排序
			//1.找到待插入元素
			for(int i=h;i<array.length;i++){
				//2.把待插入元素插入到有序序列中
				for(int j=i;j>=h;j-=h){
					//3.待插入元素为aaray[j],把array[j-h]和array[j]进行比较
					if(greater(array[j-h],array[j])){
						//交换元素
						exch(array,j,j-h);
					}
					else{
						//待插入元素找到合适位置,结束循环
						break;
					}
				}
			}	
			//减小h的值,h=h/2
			h=h/2;
		}
	}
	/*
	   * 比较v元素是否大于w元素
	   */
	private static boolean greater(Comparable v,Comparable w){
		return v.compareTo(w)>0;
	}
	/*
	   * 数组元素i和j交换位置
	   */
	private static void exch(Comparable[] a,int i,int j){
		Comparable temp;
		temp=a[i];
		a[i]=a[j];
		a[j]=temp;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值