阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。 [说明] 已知r[1...n]是n个记录的递增有序表,用折半查找法查找关键字为k的记录。若查找失败,则输出“failure",函数返回值为0;否则输出“success”,函

admin2010-12-16  20

问题 阅读以下函数说明和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);
   }

选项

答案(1) (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”。
转载请注明原文地址:https://kaotiyun.com/show/ZBjZ777K
0

最新回复(0)