关于PTA6-13折半查找运行超时的问题

我疑惑的地方:关于PTA6-13的折半查找,不理解这里为什么改掉一点就会运行超时?
原题目如下:6-13 折半查找 (15 分)

给一个严格递增数列,函数int Search_Bin(SSTable T, KeyType k)用来二分地查找k在数列中的位置。
函数接口定义:

int  Search_Bin(SSTable T, KeyType k)

裁判测试程序样例:

#include 
using namespace std;
 
#define MAXSIZE 50
typedef int KeyType;
 
typedef  struct                     
{ KeyType  key;                                             
} ElemType;  
 
typedef  struct
{ ElemType  *R; 
  int  length;
} SSTable;                      
 
void  Create(SSTable &T)
{ int i;
  T.R=new ElemType[MAXSIZE+1];
  cin>>T.length;
  for(i=1;i<=T.length;i++)
     cin>>T.R[i].key;   
}
 
int  Search_Bin(SSTable T, KeyType k);
 
int main () 
{  SSTable T;  KeyType k;
   Create(T);
   cin>>k;
   int pos=Search_Bin(T,k);
   if(pos==0) cout<<"NOT FOUND"<else cout<return 0;
}
/* 请在这里填写答案 */
正确答案是这样:
int Search_Bin(SSTable T,KeyType k){
    KeyType l,r,med;
    l=1;
    r=T.length;
    while(l<=r){
        med=(l+r)/2;
        if(T.R[med].key==k) return med;
        else if(T.R[med].key>k) r=med-1;
        else l=med+1;
    }
    return 0;
}
我的问题:如果我每次循环移动左右指标时不加1也不减1,也就是将"l=med+1;"和"r=med-1;"改为不加1也不减1:
int Search_Bin(SSTable T,KeyType k){
    KeyType l,r,med;
    l=1;
    r=T.length;
    while(l<=r){
        med=(l+r+1)/2;
        if(T.R[med].key==k) return med;
        **else if(T.R[med].key>k) r=med;
        else l=med;**
    }
    return 0;
}

pta会提示:

img

这是为什么?为什么会运行超时?难道说折半查找指标必须加一减一吗?但是这是为什么?

如果不加一减一改变边界,程序会死循环的,你可以弄一组数据跟着代码试试,这样百分百超市