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

简答题

第四题

 

阅读以下说明、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*/

   

 

 

 

问题:4.1   (12分)
请填充C函数1和C函数2中的空缺,将解答填入答题纸的对应栏内。

   

 

 

 

问题:4.2   (3分)
若有序数组中有n个元素,采用二分查找法查找一个元素时,最多与( )个数组元素进行比较,即可确定查找结果。
(7)备选答案:
A.[log2(n+1)] B.[n/2] C.n-1 D.n

   

 


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

答案:

low<=high
(2)high=mid-1
(3)low=mid+1
(4)low<=high
(5)low,mid-1
(6)mid+1,high

(7)A

解析:

问题一:对于二分查找算法,首先需要确定查找的范围,即数组中的元素范围。在C函数1的while循环中,(1)处应判断low是否小于等于high,以确定循环是否继续。在二分查找过程中,如果待查找的元素小于中间元素,那么搜索范围缩小到左半部分,即(high = mid - 1);反之,如果待查找的元素大于中间元素,那么搜索范围缩小到右半部分,即(low = mid + 1)。对于递归版本的二分查找,其逻辑相同,只是在调用自身函数时传递新的范围。因此,(2)和(3)处应填写high = mid - 1和low = mid + 1。在递归版本的二分查找中,(4)处同样需要判断low是否小于等于high以确定递归是否继续。在递归调用时,(5)和(6)处应分别传递左半部分和右半部分的范围。综上,答案如上所述。

问题二:二分查找法是一种高效的查找算法,它的比较次数取决于树的高度。在一个包含n个节点的完全二叉树中,树的高度为log2(n+1)。因此,最多与log2(n+1)个数组元素进行比较即可确定查找结果。所以答案为A。

创作类型:
原创

本文链接:第四题 阅读以下说明、C函数和问题,回答问题1和问题2将解答填入答题纸的对应栏内。【说明】当数组中的

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

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

分享考题
share