第四题阅读以下说明、C函数和问题,回答问题1和问题2将解答填入答题纸的对应栏内。 【说明】 当数组中的元素已经排列有序时,可以采用折半查找(二分查找)法查找一个元素。下面的函数biSearch(intr[],intlow,inthigh,intkey)用非递归方式在数组r中进行二分查找,函数biSearch_rec(intr[],intlow,inthigh,intkey)采用递归方式在数组r中进行二分查找,函数的返回值都为所找到元素的下标;若找不到,则返回-1。 【C函数1】 intbiSe

欢迎免费使用小程序搜题/刷题/查看解析,提升学历,成考自考报名,论文代写、论文查重请加客服微信skr-web

第四题阅读以下说明、C函数和问题,回答问题1和问题2将解答填入答题纸的对应栏内。 【说明】 当数组中的元素已经排列有序时,可以采用折半查找(二分查找)法查找一个元素。下面的函数biSearch(intr[],intlow,inthigh,intkey)用非递归方式在数组r中进行二分查找,函数biSearch_rec(intr[],intlow,inthigh,intkey)采用递归方式在数组r中进行二分查找,函数的返回值都为所找到元素的下标;若找不到,则返回-1。 【C函数1】 intbiSearch(intr[],intlow,inthigh,intkey) //r[low..high]中的元素按非递减顺序排列 //用二分查找法在数组r中查找与key相同的元素 //若找到则返回该元素在数组r的下标,否则返回-1 { intmid; while((1)){ mid=(low+high)/2; if(key==r[mid]) returnmid; elseif(key<r[mid]) (2); else (3); }/*while*/ return-1; }/*biSearch*/ 【C函数2】 intbiSearch_rec(intr[],intlow,inthigh,intkey) //r[low..high]中的元素按非递减顺序排列 //用二分查找法在数组r中查找与key相同的元素 //若找到则返回该元素在数组r的下标,否则返回-1 { intmid; if((4)){ mid=(low+high)/2; if(key==r[mid]) returnmid; elseif(key<r[mid]) returnbiSearch_rec((5),key); else returnbiSearch_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-1D.n

low<=high (2)high=mid-1 (3)low=mid+1 (4)low<=high (5)low,mid-1 (6)mid+1,high (7)A 【解析】 本题考察折半查找。二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好,占用系统内存较少;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。 二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x。 总共有n个元素,渐渐跟下去就是n,n/2,n/4,....n/2^k(接下来操作元素的剩余个数),其中k就是循环的次数。

访客
邮箱
网址

通用的占位符缩略图

人工智能机器人,扫码免费帮你完成工作


  • 自动写文案
  • 自动写小说
  • 马上扫码让Ai帮你完成工作
通用的占位符缩略图

人工智能机器人,扫码免费帮你完成工作

  • 自动写论文
  • 自动写软件
  • 我不是人,但是我比人更聪明,我是强大的Ai
Top