如果输入的数组无序,需要用一个sort进行从小到大排序。
最基础的二分查找。
#include<iostream>
#include<string>
using namespace std;
int binarysearch(int a[],int left,int right,int x){
int mid;
while(left<=right){
mid=(left+right)/2;
if(a[mid]==x) return mid;
if(a[mid]<x){
left=mid+1;
}
if(a[mid]>x){
right=mid-1;
}
}
return -1;
}
int main(){
int a[10]={1,3,4,6,7,8,10,11,12,15};
cout<<binarysearch(a,0,9,6);
return 0;
}
如果递增序列元素重复,查找序列中第一个大于等于x的元素位置
代码:
int low_bound(int a[],int left,int right,int x)
{
int mid;
while(left<right){
mid=(left+right)/2;
if(a[mid]>=x)
right=mid;
else{
left=mid+1;
}
}
return left;
}
查找序列中第一个大于x的元素位置,代码只是把lower_bound中的a[mid]>=x改为a[mid]>x;
int low_bound(int a[],int left,int right,int x)
{
int mid;
while(left<right){
mid=(left+right)/2;
if(a[mid]>x)
right=mid;
else{
left=mid+1;
}
}
return left;
}