//二分查找,非递归
Position BinarySearch( List L, ElementType X ){
int l = 1;
int h = L->Last;
int mid;
while(l<=h){
mid = (h+l)/2;
//范围变成小半部分l~mid-1
if(L->Data[mid]>X)
h = mid-1;
//范围变成大半部分mid+1~h
else if(L->Data[mid]<X)
l = mid+1;
else//找到
return mid;
}
return NotFound;
}
//递归搜索函数
Position BinarySolve(List L,int l,int h,ElementType X){
if(l>h)
return NotFound;
int mid = (l+h)/2;
if(L->Data[mid]==X)
return mid;
if(L->Data[mid]>X)
return BinarySolve(L,l,mid-1,X);
return BinarySolve(L,mid+1,h,X);
}
Position BinarySearch(List L, ElementType X){
return BinarySolve(L,1,L->Last,X);
}