折半查找(二分法查找)
我们在对一个有序数组中查找元素x,传统的顺序查找的时间复杂度对于有序数组中查找元素x来讲是过于缓慢的和耗时的,所以,我们充分利用有序数组的性质,开发出一种折半查找即二分法查找的程序来加提高查找程序运行的效率。
与STL的算法binary_search非常类似,变量left和right分别表示搜索段的左右两个端点。开始的时候,在0~n-1之间进行查找,因此left 和right 的初始值分别为0和n-1。在查找过程中,保持不变的是:x是数组a[0,n-1]中的元素,当且仅当x是a[left,right]中的元素。
下面展示折半查找(二分查找)的代码:
#include<iostream>
using namespace std;
template<class T>
int binarysearch(T a[],int n,const T& x)
{
int left = 0;
int right = n-1;
while(left <= right)
{
int middle = (left+right)/2;
if(x == a[middle]) return middle;
if(x > a[middle]) left = middle+1;
else
{
right = middle-1;
}
}
return -1;
}
这个程序还是很好理解的。