- 2的20次方是100萬,就是(1M),折半查找100萬個數據只需要20次
- 2的30次方就是10億,也就是(1G),折半查找只需要30次
C++算法五:二分查找(折半)查找
二分查找是對排序的數據進行排序,查找效率非常高。
#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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.