填空题 阅读以下函数说明和C语言函数,将应填入{{U}} (n) {{/U}}处的字句写在对应栏内。 [说明] 已知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={{U}} (1) {{/U}}; if(k<r[mid].key){{U}} (2) {{/U}}; else if(k==r[mid].key){ printf("succesS/n"); {{U}} (3) {{/U}}; } else{{U}} (4) {{/U}}; } printf("failure/n"); {{U}} (5) {{/U}}; }
  • 1、
【正确答案】 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”。