排序算法(五)希尔排序

            

如上图所示,第一步分红3个队列,队列长度的一半(len/2)为间隔调用插入排序java

第二部间隔/2 ,插入排序shell

直到间隔为1,排序完成。code

 

public static void main(String[] args) {
		int[] a = {1, 5, 88, 4, 5, 0, 84, 69, 12, 5, 10, 254};
		System.out.println(Arrays.toString(a));
		shellSort(a);
		System.out.println(Arrays.toString(a));
	}
	
	/**
	 * 希尔排序
	 */
	public static void shellSort(int[] a){
		if(a!=null){
			int len = a.length,interval=len/2;//首次间隔为长度的1/2
			while(interval>0){
				for(int i = interval;i<len;i++){
					if(a[i]<a[i-interval]){
						int temp = a[i];
						int j = i-interval;
						for(;j>=0&&(temp<a[j]);j-=interval){
							a[j+interval] = a[j];
						}
						a[j+interval] = temp;
					}
				}
				interval = interval / 2;
			}
		}
	}
相关文章
相关标签/搜索