使用二分法在一组升序的数据中进行找第一个X出现的下标,没有返回-1
#include<iostream>
using namespace std;
//循环实现
int cycle(int a[],int l,int r,int n){
int mid;
while(l<=r){
mid=(l+r)/2;
if(a[mid]<n)
l=mid+1;
else
r=mid-1;
}
if(a[l]==n)
return l;
else
return -1;
}
int main(){
int a[]={0,1,7,7,7,7,7,7,8,9,10};
cout<<cycle(a,0,10,7)<<endl;
return 0;
}
#include<iostream>
using namespace std;
//递归实现
int recursive(int a[],int l,int r,int n){
if(l<=r){
int mid=(l+r)/2;
if (a[mid]<n)
return recursive(a,mid+1,r,n);
else
return recursive(a,l,mid-1,n);
}
if(a[l]==n)
return l;
else
return -1;
}
int main(){
int b[]={0,1,2,7,7,7,7,7,8,9,10};
cout<<recursive(b,0,10,7)<<endl;
return 0;
}