数据结构PTA第一周作业题3

这是一个函数题,写二分查找:

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;
}

 

你可能感兴趣的:(PTA)