二分查找是对排序的数据进行排序,查找效率非常高。
- 2的20次方是100万,就是(1M),折半查找100万个数据只需要20次
- 2的30次方就是10亿,也就是(1G),折半查找只需要30次
#include<iostream>
using namespace std;
int BinarySearch_I(int *a,const int x,const int n);
int BinarySearch_r(int *a,const int x,const int left,const int right);
int main()
{
int m[] = {0,1,2,3,4,5,6,7,8,9,10};
int reslut,reslut1,num=28;
reslut = BinarySearch_r(m,num,0,10);
if(reslut<0)
{
cout<<"没找到";
}else{
cout<<"在m["<<reslut<<"]找到"<<endl;
}
reslut1 = BinarySearch_I(m,num,10);
if(reslut<0)
{
cout<<"没找到";
}else{
cout<<"在m["<<reslut<<"]找到"<<endl;
}
return -1;
}
//迭代
int BinarySearch_I(int *a,const int x,const int n)
{
int left = 0,right = n-1;
while(left<=right)
{
int mid = (left+right)/2;
if(x<a[mid]) right = mid -1;
else if(x>a[mid]) left = mid +1;
else return mid;
}
return -1;
}
//递归
int BinarySearch_r(int *a,const int x,const int left,const int right)
{
if(left<=right)
{
int mid = (left+right)/2; //算法的核心就是折半
if(x<a[mid]) return BinarySearch_r(a,x,left,mid -1);
else if(x>a[mid]) return BinarySearch_r(a,x,mid+1,right);
else return mid;
}
return -1;
}