二分查找函数
思路还是很简单的,就是 “左倾”还是“右倾”的问题。需要注意的细节就是 当要查找的值在 头和尾的情况。
解决办法就是在 while 语句的条件的中取 < 还是 <= 。
这个需要思考一哈,哈哈哈。
附上我的两个代码,第一个是我初学,第二个是我学了两个月后。
//二分法的本质就是不停缩小范围,因为是顺序的序列,于是靠找端点缩小范围成为可能
int BinarySearch( List L, ElementType X)
{
int Left, Right, Center;
Left = 1; Right = L->Last;
Center = ( Left+Right)/2;
// 1 2 3 4 5 6 7 8 9
int flag = 0;
while(Left < Right){
if( X > L->Data[Center]){
Left = Center + 1;
Center = ( Left + Right)/2;
}
if( X < L->Data[Center]){
Right = Center - 1;
Center = (Left + Right)/2;
}
if( X == L->Data[Center] ){
flag = 1;
return Center;
break;
}
}
if( flag == 0)
return NotFound;
}
二个月后的代码,嘻嘻
Position BinarySearch( List L, ElementType X )
{
int left = 1, right = L->Last, mid;
while( left<=right ){ //等于在答案出现在尾部的时候用到
mid = (left + right)/2;
if( L->Data[mid] == X ){
return mid;
}
else if( L->Data[mid] > X ){
right = mid - 1;
}
else{
left = mid + 1;
}
}
return NotFound;
}
有任何问题欢迎评论区讨论~