【數據結構與算法設計】希爾排序

希爾排序( 最壞O(N^2)  )

重要概念:增量序列 增量
增量hk習慣於取len/2,然後遞減hk=hk/2,直到等於1。
對於hk排序:下標爲hk,hk+1,...,len-1 元素i,i放到i,i-hk, i-2hk...正確的位置上。
個人理解:也就是間隔hk排序,最後會進行間隔1排序,也就是全局排序。
//默認是升序
public void sort(int[]nums){
	int len = nums.length;
	//取hk=len/2
	for(int hk = len/2;hk>0;hk/=2){
		for(int i=hk;i<len;i++){
			//從i開始,以hk的間隔往前遍歷,找到nums[i]合適的位置插入
			int cur = nums[i];
			int j=i;
			for(j=i;j>=hk;j-=hk){
				if(cur<nums[j-hk])
					nums[j]=nums[j-hk];
				else
					break;
			}
			nums[j]=cur;
		}
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章