这是一个函数题,写二分查找:
https://pintia.cn/problem-sets/1077214780527620096/problems/1077218398207094786
本想写递归,发现被查找的数X在Middle右侧是不太会处理(主要是函数的接口题目中已经固定了,不能自己随意再改形参列表),就改成循环写法了。
另:right=Middle-1; left=Middle+1; 这两句如果把+1/-1去掉,会出问题,至少在X不在列表里时会陷入死循环。
另外,偶数个时候会怎么样?没影响。
从3个数,X不存在3个数中 这种情况考虑,就可以明白:如果把+1/-1去掉,会出问题,在X不在列表里时会陷入死循环
Position BinarySearch( List L, ElementType X )
{
//Position Middle = (1 + L->Last)/2;
//if(X == L->Data(Middle)){
// return Middle;
//}
//else if(X < L->Data(Middle)){
// L->Last = Middle-1;
// return BinarySearch(L, X);
//}
//else{
//}
Position left = 1;
Position right = L->Last;
while(left<=right)
{
Position Middle = (left + right)/2;
if(X < L->Data[Middle]){
right = Middle-1;
}
else if(X > L->Data[Middle]){
left = Middle+1;
}
else{
return Middle;
}
}
return NotFound;
}