题:
有一段递增有序数组,将其分割后重新组合;
求与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值在递增一方里是 递归调用即可继续二分查找。
在另一方则遍历查找。