网友您好, 请在下方输入框内输入要搜索的题目:
题目内容
(请给出正确答案)
以下函数在a[0]到a[n-1]中,用折半查找算法查找关键字等于k的记录,查找成功返回该记录的下标,失败时返回-1,完成程序中的空格。
参考答案
参考解析
略
更多 “以下函数在a[0]到a[n-1]中,用折半查找算法查找关键字等于k的记录,查找成功返回该记录的下标,失败时返回-1,完成程序中的空格。 ” 相关考题
考题
设查找表为(7,15,21,22,40,58,68,80,88,89,120) ,元素的下标依次为1,2,3,……, 11.(1)画出对上述查找表进行折半查找所对应的判定树(树中结点用下标表示)(2)说明成功查找到元素40需要经过多少次比较?(3)求在等概率条件下,成功查找的平均比较次数?
考题
N个有序整数数列已放在一维数组中,给定下列程序中,函数fun()的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,则返回其下标值:反之,则返回-1。折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(low<high),然后把m与中间位置(mid)中元素的值进行比较。如果m的值大于中间位置元素中的值,则下一次的查找范围放在中间位置之后的元素中;反之,下次查找范围落在中间位置之前的元素中。直到low>high,查找结束。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:include <stdio.h>define N 10/*************found*********************/void fun(int a[],int m){ int low--0,high=N-l,mid;while (low<=high){ mid=(low+high)/2;if(m<a[mid])high=mid-1;/*************found*********************/else if(m>=a [mid])low=mid+1;else return(mid);}return(-1);}main (){ int i,a[N]={-3,4,7,9,13,24,67,89,100,180},k,m;printf ("a数组中的数据如下: ");for(i=0;i<N;i++) printf("%d",a[i]);printf ("Enter m: "); scanf ("%d", m);k=fun (a,m);if (k>=0) printf ("m=%d, index=%d\n",m, k);else printf("Not be found!\n");}
考题
借助于快速排序的算法思想,在一组无序的记录中查找给定关键字值等于key的记录。设此组记录存放于数组r[l..n]中。若查找成功,则输出该记录在r数组中的位置及其值,否则显示“not find”信息。请简要说明算法思想并编写算法。
考题
在查找算法中,可用平均查找长度(记为ASL)来衡量一个查找算法的优劣,其定义为:此处Pi为表中第i个记录被查找的概率,Ci为查找第i个记录时同关键字比较的次数,n为表中记录数。以下叙述中均假定每一个记录被查找的概率相等,即Pi=//n(i=1,2,…,n)。当表中的记录连续存储在一个一维数组中时,可采用顺序查找与折半查找方法(折半查找要求表是按关键字有序排列的)。顺序查找时的ASL为(19),折半查找时的ASL为(20)。记录的关键字有序时,用二叉排序树查找记录,在最坏的情况下,ASL为(21)。当二叉排序树是一棵平衡树时,ASL为(22)。在平衡树上删除一个结点后可以通过旋转使其平衡,最坏的情形下需(23)次旋转。A.O(1)B.O(log2n)C.O(log2n2)D.O(nlog2n)E.O(n)
考题
● 已知一个线性表(16, 25, 35, 43, 51, 62, 87, 93),采用散列函数H(Key)=Key mod 7将元素散列到表长为9的散列表中。若采用线性探测的开放定址法解决冲突(顺序地探查可用存储单元),则构造的哈希表为 (57) ,在该散列表上进行等概率成功查找的平均查找长度为 (58) (为确定记录在查找表中的位置,需和给定关键字值进行比较的次数的期望值称为查找算法在查找成功时的平均查找长度)。
考题
阅读以下函数说明和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);}
考题
在Visual FoxPro中,使用LOCATE ALLexpL命令按条件查找记录,可以通过下面哪一个函数来判断命令查找到满足条件的记录( )。A)通过FOUND函数返回.F.值B)通过BOF函数返回.T.值C)通过EOF函数返回.T.值D)通过EOF函数返回.F.值
考题
● 关于线性表的顺序查找、折半查找、分块查找方法的叙述中,错误的是 (47) 。(47)A. 顺序查找的算法非常简单但效率较低B. 折半查找法的平均查找长度小,查找速度快C. 分块查找的平均长度介于顺序查找和折半查找之间D. 分块查找只能用于顺序存贮结构,且要求表中记录是有序的
考题
第四题 阅读以下说明、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 (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 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
考题
填空题VLOOKUP函数采用()模式时,如果未查找到完全匹配的记录,将返回出错信息
热门标签
最新试卷