分析
代码实现
#include <bits/stdc++.h>
using namespace std;
int search(int arr[],int low,int high){
while(low<=high){
int mid=(low+high)/2;
if(arr[mid]>mid){
high=mid-1;
}else if(arr[mid]<mid){
low=mid+1;
}else{
return 1; // 1表示有
}
}
return 0;//0表示无
}
int main(){
int arr[6]={0,2,5,6,8,9};
int n=6;
int low=0;
int high=n-1;
cout<<search(arr,0,n-1);
}
需要说明的:
在第6行,因为数组都是整数,且是升序的,故而当 arr[mid]>mid
时, min(arr[mid])=mid+1,min(arr[mid+1])=mid+2
依此类推,所以可以判定下标[mid,high]都不满足条件,需要舍去,故而让 high=mid-1,让程序在 low~mid-1 的范围内搜索符合条件的下标。
第8行类似。