按照题目要求我们采用非递归的方式进行:
设置low、mid、high三个指针;low小于等于high作为while循环的结束条件(注意定要有等于号,我一开始在这个地方犯了错误)。
例如数组1234中找到4,如下图:
step1:
step2:
那么到此处,如果low=high我们不进一步做判断,会return Notfound,与实际结果不吻合。
Position BinarySearch( List L, ElementType X ){
int low,mid,high;
low=1;high=L->Last;
while(low<=high){
mid=(low+high)/2;
if(L->Data[mid]==X){
return mid;
}else if(L->Data[mid]<X){
low=mid+1;
//return NotFound;
}else {
high=mid-1;
}
}
return NotFound;
}