在 [4,5,9,23,1,2,3] 循环有序的数组中查找关键词 K。
上次递归实现不是很好,就当是练习递归了,见blog
代码如下:
int FindK(int a[],int k,int n){
int high,low;
high=n-1;
low=0;
while(high>low){
int mid=(high+low)/2;
if(a[mid]>a[low]){
if(a[mid]>=k&&a[low]<=k){
high=mid;
low=low;
}
else{
low=mid+1;
high=high;
}
}
else{
if(a[mid]<k&&a[high]>=k)
{
high=high;
low=mid+1;
}
else{
high=mid;
low=low;
}
}
}
if(a[high]!=k){
high=-1;
}
return high;
}
输入:
int main(int argc, char** argv) {
int a[6]={5,6,9,1,3,4};
cout<<FindK(a,1,6);
return 0;
}
输出:
3
输入:
int main(int argc, char** argv) {
int a[6]={5,6,9,1,3,4};
cout<<FindK(a,0,6);
return 0;
}
输出:
-1
完整代码GitHub