二分查找法(折半查找):
二分查找法主要是解决在“一堆数中找出指定的数”这类问题
复杂度:O(logn)
使用二分查找法的条件:
(1)、存储在数组中;
(2)、有序排列(升序或降序都可以)
二分查找的效率:
1000个数据,约10次找出;
1e6(100万)个数据,约20次找出;
1e9个数据,约30次找出;
2^n个数据,约n次
* 给定一个已排序的整数数组(升序)和一个要查找的整数value,
* 用O(logn)的时间查找到value第一次出现的下标(从0开始),
* 如果value不存在于数组中,返回 -1。
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
int a[10],n;
int Search(int value)
{
int L=1,R=n,ans=-1;
while(L<=R){
int mid=(L+R)>>1;
if(a[mid]<value) L=mid+1;
else if(a[mid]>value) R=mid-1;
else{
ans = mid;
return ans;
}
}
return ans;
}
int main(){
int find_num,index;
scanf("%d",&find_num);
scanf("%d",&n);
for(int i=1; i<=n; ++i) scanf("%d",&a[i]);
index = Search(find_num);
if(index==-1) printf("NO\n");
else printf("%d\n",index);
return 0;
}