数据结构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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值