`

希尔排序

 
阅读更多
一、
    希尔排序就是加强版的直接插入排序(在有序队列中找到合适的位置进行插入)
class shellSort
{
	static void sort(int[] a,int control){
		//初始增量
		int gap=a.length/control;
		//增量递减,也可以改变递减的幅度,但最后要加上一步对整体进行直接插入排序,即步长为1
		for(;gap>0;gap=gap/2){//要确保最后一次排序的步长为1,即对整体进行直接插入排序
			//gap为1时,表示对待排数组进行直接插入排序
		    for(int i=0;i<gap;i++){
				//对每组进行直接插入排序
				  for (int j = i+1 ; j < a.length; j +=gap){
        				insert(a,j,gap);
			       }
				   //print(a);
			}
		}
	}
	static void insert(int[] a,int c,int gap){
//从小到大,前方都是有序的队列
		a[0]=a[c];
		while(c-gap>0 && a[0]<a[c-gap]){
			a[c]=a[c-gap];
			c -=gap;
		}
		a[c]=a[0];
	}
	static void print(int[] a){
		System.out.println();
		for(int i=1;i<a.length;i++){
			System.out.print(" "+a[i]);
		}
		System.out.println();
	}
	public static void main(String args[]){
		int[] a={0,9,8,6,8,90,3,2,2,23,4,5,12,345};
		sort(a,5);
		print(a);
	}

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics