阅读以下函数说明和C语言函数,将应填入 (n) 处的字句写在对应栏内。
[说明]
已知r[1...n]是n个记录的递增有序表,用折半查找法查找关键字为k的记录。若查找失败,则输出“failure",函数返回值为0;否则输出“success”,函数返回值为该记录的序号值。
[C函数]
int binary search(struct recordtype r[],int n,keytype k)
intmid,low=1,hig=n;
while(low<=hig)
mid= (1) ;
if(k<r[mid].key) (2) ;
else if(k==r[mid].key)
printf("succesS\n");
(3) ;
else (4) ;
printf("failure\n");
(5) ;
参考答案:(low+hig)/2 (2) hig=mid-1 (3) returnmid (4) low=mid+1 (5) return 0
解析:
折半查找法也就是二分法:初始查找区间的下界为1,上界为len,查找区间的中界为k=(下界+上界)/2。所以(1)应填“(low+hig)/2”。中界对应的元素与要查找的关键字比较。当k<r[mid].key时,(2)填“hig=mid-1”;当k==r[mid].key时,(3)填“return mid”;当k>r[mid].key时,(4)填“low=mid+1”。如果low>hig时循环终止时,仍未找到需查找的关键字,那么根据题意返回0,即空(5)填“return 0”。