排序算法(五)希爾排序

            

如上圖所示,第一步分紅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;
			}
		}
	}
相關文章
相關標籤/搜索