二分查找比顺序查找效率高很多
同样的100万个数据,顺序查找需要50万次,而二分查找需要20次左右既可以了。但是二分查找需要的数据是已经排列好的,无序的数据则用不了二分查找。
#include <iostream>
/*
二分查找:必须是已经排序好的数,有递归和迭代(循环)两种方式,递归的效率比迭代的效率高得多
*/
using namespace std;
int BinarySearch_D(int *a,const int left,const int right,const int x)
{
if(left<=right)
{
int middle=(right+left)/2; //取中间
if(x<a[middle])
return BinarySearch_D(a,left,middle-1,x); //进行左边递归
else if(x>a[middle])
return BinarySearch_D(a,middle+1,right,x); //进行右边递归
else return middle; //找到
}
return -1;
}
int BinarySearch_I(int *a,const int n, const int x)
{
int left=0,right=n-1;
while(left<=right)
{
int middle=(right+left)/2; //取中间
if(x<a[middle])
right=middle-1;
else if(x>a[middle])
left=middle+1;
else return middle; //找到
}
return -1;
}
int main()
{
int a[]={0,1,2,3,4,5,6,7,8,9};
int p=BinarySearch_D(a,0,9,7);
cout<<"p的值:"<<p;
//cout << "Hello world!" << endl;
int y=BinarySearch_I(a,10, 7);
cout<<"p的值"<<y;
return 0;
}