算法的优化就在于提高它的效率即缩短运行时间,这就涉及到了时间复杂度的问题。对于一般的顺序查找法,用二分查找法快得多,特别是在查找的范围大时,二分查找法的优势就更明显了,举个例子,像在100万个数中查找,用普通的顺序查找法那是相当恐怖的,运气差点就得找100万个数,而如果用二分查找法最多就20次,因为2的20次方就是100万左右。所以用好方法可以让你的代码简洁高效。
O(1)< O(logn)< O(n)< O(n^2)
下面是代码实现二分查找法
#include <iostream>
using namespace std;
int HalfCheck(int *a, const int x, const int n);
int main()
{
int a[]={1,2,3,4,5,6,7,8,9,10};
int m=5;
int result;
result = HalfCheck(a,m,10);
if(result <0)
cout << "没找到"<<endl;
else
cout << "在a["<< result<< "]找到"<<endl;
return 0;
}
int HalfCheck(int *a, const int x,const int n)
{
int low,high,mid;
low = 0;high = n-1;
while(low <= high)
{
mid = (low+high)/2;
if(a[mid] == x)
return mid;
else if(a[mid] < x)
low = mid+1;
else if(a[mid] > x)
high =mid-1;
}
return -1;
}