问题描述:二分搜索用以确定一个已经排序的数组X[N]中是否包含元素t,若包含,则返回下标p,其中X[p] = t,否则返回-1.
假设该数组为递增数组,N ≥ 0,X[0] ≤ x[1] ≤ x[2] ≤ ... ≤ x[N-1].
补充:二分搜索的算法并不复杂,但是写一个完全正确的二分搜索并不简单。Knuth在其The Art of Computer Programming,Volume 3:Sorting and Searching的6.2.1节的历史部分指出,虽然第一篇二分搜索论文1946年就发表了,但是第一个没有错误的二分搜索程序却直到1962年才出现。
编写程序:
伪代码(来自《编程珠玑》):
l = 0; u = n - 1
loop
{ mustbe(l, u) }
if l > u
p = -1; break
m = (l + u) / 2
case
x[m] < t: l = m+1
x[m] ==t: p = m; break
x[m] > t: u = m-1
c代码:
int binarySearch(DataType t,DataType x[],int n)
{
int l,u,m;
l = 0;
u = n - 1;
while(l <= u)
{
m = (l + u)/2;
if(x[m] < t)
l = m + 1;
else if(x[m] == t)
return m;
else
u = m - 1;
}
return -1;
}
测试代码:
void main()
{
DataType TestArray[] = {1,2,3,5,6,9,12,15,19,91};
int t = 90;
cout<<binarySearch(t,TestArray,sizeof(TestArray)/sizeof(TestArray[0]))<<endl;
}