二分查找法

来源:互联网 发布:广东联通宽带提速软件 编辑:程序博客网 时间:2024/05/16 15:23

二分查找法(折半查找):

二分查找法主要是解决在“一堆数中找出指定的数”这类问题

复杂度: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;}

原创粉丝点击