二分查找的百度网址先附在这里:二分法查找_百度百科
二分查找是一种高效的查找算法,最坏时间复杂度也高达O(logn),最好达到O(1),可以用循环或递归实现,实现的前提必须是数组已经排序,至于为什么已经排序,用一个简单的例子说明。
数组a[10]={0,1,8,3,4,2}。要查找8,第一轮下来由于3小于8,所以左边变为4,查找下来找不到8,可以自己去试一下。
代码并不难写,下面给出循环实现。
循环
#include<bits/stdc++.h>
#define cio ios::sync_with_stdio(0);
using namespace std;
int a[10000005];
inline void search(int l,int r,int x){
while(l<=r){
int m=(l+r)/2;
if(a[m]==x){
cout<<m;
return;
}
else if(a[m]<x){
l=m+1;
}
else{
r=m;
}
}
cout<<-1;
return;
}
int main()
{
int n,x;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
cin>>x;
search(1,n,x);
return 0;
}