演算法-分割有序陣列後查值-二分查詢的變形
阿新 • • 發佈:2019-01-11
題:
有一段遞增有序陣列,將其分割後重新組合;
求與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值在遞增一方里是 遞迴呼叫即可繼續二分查詢。
在另一方則遍歷查詢。