1. 程式人生 > >演算法-分割有序陣列後查值-二分查詢的變形

演算法-分割有序陣列後查值-二分查詢的變形

題:

有一段遞增有序陣列,將其分割後重新組合;

求與key值匹配的陣列下標; 例:{1,2,3,4,5,6,7,8,9} 分割重組後為{5,6,7,8,9,1,2,3,4}  key=9時  返回 4;

int fun(int key,int [] a,int start ,int end){
		if(start > end) return -1;
		int mid = start + (end-start)/2;
		if(key == a[mid])
			return mid;
		else if(a[mid]<a[end-1])
			if(key<a[end-1]&&key>a[mid])  return fun(key,a,mid+1,end);
			else 
				for (int i = 0; i < mid; i++) {
					if(key==a[i])
						return i;
				}
		else if(a[0]<a[mid]){
			if(key<=a[mid]&&key>=a[0])  return fun(key,a,0,mid);
			else 
				for (int i = mid+1; i < end; i++) {
					if(key==a[i])
						return i;
				}
		}
		return -1;
	}


此題可分析為:

分割後的陣列進行二分查詢時,一定有一方(左或者右)還是遞增的,當key值在遞增一方里是  遞迴呼叫即可繼續二分查詢。

在另一方則遍歷查詢。