刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

试题四(共15分,每空3分)

阅读以下说明、C函数和问题,回答问题1和问题2将解答填入答题纸的对应栏内。

【说明】

当数组中的元素已经排列有序时,可以采用折半查找(二分查找)法查找一个元素。下面的函数biSearch(int r[],int low,int high,int key)用非递归方式在数组r中进行二分查找,函数biSearch_rec(int r[],int low,int high,int key)采用递归方式在数组r中进行二分查找,函数的返回值都为所找到元素的下标;若找不到,则返回-1。

【C函数1】

int biSearch(int r[],int low,int high,int key)

//r[low..high] 中的元素按非递减顺序排列

//用二分查找法在数组r中查找与key相同的元素

//若找到则返回该元素在数组r的下标,否则返回-1

{

int mid;

while((1)) {

mid = (low+high)/2 ;

if (key ==r[mid])

return mid;

else if (key<r[mid])

(2);

else

  (3);

}/*while*/

return -1;

}/*biSearch*/

 

【C 函数 2】

int biSearch_rec(int r[],int low,int high,int key)

//r[low..high]中的元素按非递减顺序排列

//用二分查找法在数组r中查找与key相同的元素

//若找到则返回该元素在数组r的下标,否则返回-1

{

int mid;

if((4)) {

mid = (low+high)/2 ;

if (key ==r[mid])

return mid;

else if (key<r[mid])

return biSearch_rec((5),key);

else

return biSearch_rec((6),key);

 }/*if*/

return -1;

}/*biSearch_rec*/

 

请完善二分查找法的非递归和递归版本的C函数。

使用微信搜索喵呜刷题,轻松应对考试!

答案:

(1)low<=high

(2)high=mid-1

(3)low=mid+1

(4)low<=high

(5)r,low,mid-1

(6)r,mid+1,high

(7)A

解析:

对于C函数1(非递归版本的二分查找):

(1)while循环的条件应该是low小于等于high,这样循环才能正常进行,直到找到目标元素或确定目标元素不存在。
(2)当目标元素小于中间元素时,查找范围缩小到数组的左半部分,因此需要更新high为mid - 1。
(3)当目标元素大于中间元素时,查找范围缩小到数组的右半部分,因此需要更新low为mid + 1。

对于C函数2(递归版本的二分查找):

(4)递归调用的条件同样是low小于等于high。
(5)当目标元素小于中间元素时,递归调用函数本身,但查找范围缩小到数组的左半部分,即r数组、low和mid - 1。
(6)当目标元素大于中间元素时,递归调用函数本身,但查找范围缩小到数组的右半部分,即r数组、mid + 1和high。

创作类型:
原创

本文链接:请完善二分查找法的非递归和递归版本的C函数。

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share