采用数据结构折半查找算法法在长度为12的有序表中查找一个元素时,查找成功的平均查找长度为

提问回答都赚钱
> 问题详情
已知一个长度为16的顺序表L,其元素按关键字有序排列,若采用折半查找法查找一个不存在的元素,则比
悬赏:0&&答案豆&&&&提问人:匿名网友&&&&提问收益:0.00答案豆&&&&&&
已知一个长度为16的顺序表L,其元素按关键字有序排列,若采用折半查找法查找一个不存在的元素,则比较次数最多是(
A.4 B.5 C.6 D.7请帮忙给出正确答案和分析,谢谢!
发布时间:&&截止时间:
网友回答&(共0条)
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&10.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&10.00元收益
回答悬赏问题预计能赚取&2.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&10.00元收益
回答悬赏问题预计能赚取&4.00元收益
回答悬赏问题预计能赚取&10.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&2.00元收益
回答悬赏问题预计能赚取&5.00元收益
回答悬赏问题预计能赚取&2.00元收益
回答悬赏问题预计能赚取&20.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&22.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&22.00元收益
回答悬赏问题预计能赚取&5.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
你可能喜欢的
[] [] [] [] [] [] [] [] [] [] [] []
请先输入下方的验证码查看最佳答案
图形验证:查找与排序练习题_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
查找与排序练习题
上传于||暂无简介
阅读已结束,如果下载本文需要使用
想免费下载本文?
你可能喜欢第7章 查找技术习题解析_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
第7章 查找技术习题解析
上传于||暂无简介
阅读已结束,如果下载本文需要使用
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩6页未读,继续阅读
你可能喜欢有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值_百度知道
有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值
&quot,i););n&%d&a[11])
if(n==a[13])
i=14。如果该数不在数组中,-8,它的结果总是显示是第1个数: &#92.0上检测没有错误和警告;你想要查找的数字为,请问我编的错在哪里;n&;); printf(&quot?不符之处在于当我输入一个不在该数组中的值时;=n&lt,n;
if(n==a[3])
i=4;\=a[0]) {
if (n==a[7])
i=8; scanf(&a[1])
i=3;;a[5])
i=7;)。#include &);int main(){ int a[15]={98,29;n&quot,10;
else if(n&
else if(n&%5d&;a[7])
if(n==a[11])
i=12,但是和题中要求不符;
else if(n&
else if(n& printf(&quot,则输出“无此数”;
} printf(&i++)
printf(&quot,-12};a[13])
else i=9,38; if(a[14]&
if(n==a[9])
i=10; return 0;n&
else if(n&lt,64;a[3])
if(n==a[5])
i=6,&n),输入一个数;a[9])
i=11;&#92,53,43;
else if(n& printf(& printf(&quot,58; int i!&\);15; for(i=0,25; printf(&quot,46,51;数组中数据如下,5,n;
if(n==a[1])
else i=5;stdio。自己编了个简单程序c++6;%d是此数组中第%d个元素的值&
else if(n& } else printf(&
else i=13,31.h&gt,要求用折半查找法找出该数是数组中第几个元素的值,a[i]);)有15个数按由大到小顺序存放在一个数组中;i&lt
提问者采纳
low = mid + 1;);
if(flag == 0){
printf(&quot,n;数组中数据如下,-8;=high)
mid = (low+high)/%d&n&quot,high,n&n&
while(low&lt,mid,他就默认为你这个数可以进的你的第一个if里面: &你想要查找的数字为;
flag = 1,51,58;
for(i=0; 只是限定了 你要输入的数的大小范围,10; printf(&quot,38;=a[0])&&#92,5; high = 15,46;
printf(&quot,-12},折半查找法。然后在里面 他又找不到你合适的数 就直接else到最后一个分支了;), printf(&n)
high = mid - 1。,应该没问题;
low = 0;\
if(a[mid]==n)
else if(a[mid]&gt,&n),25;%d是此数组中第%d个元素的值&}else{
printf(&i&lt。我写了一下你的作业,53;;查无此数据\,a[i]);,29;=n&lt。 void main(){
int a[15]={98。;n&quot,43;);i++)
printf(&&#92,temp+1),31;if(a[14]&15;
scanf(&quot。另外: \
printf(&);%5d&quot,n;n&quot。没运行你这个程序 这句话&);),也就是说你这个数 只要出现在 -12~98 的范围之内,64;
提问者评价
太给力了,你的回答完美地解决了我的问题,非常感谢!
采纳率100%
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁数据结构(本科)作业4
数据结构(本)课程作业
(本部分作业覆盖教材第8-9章的内容)
一、单项选择题
1.顺序查找方法适合于存储结构为(&&&
)的线性表。
A.散列存储&&&&&&&&&&
&&&&&&&&&&&B.索引存储&&&&&&&&&&&&
C.散列存储或索引存储&&&&&&&&&
&&D.顺序存储或链接存储
2.对线性表进行二分查找时,要求线性表必须(&&&
A.以顺序存储方式&&&&&&&&&&&&&&&
B.以链接存储方式
C.以顺序存储方式
,且数据元素有序&&&&&&&&&&&&&&
D.以链接存储方式,且数据元素有序&
3.如果要求一个线性表既能较快地查找,又能动态适应变化要求,可以采用(&&&
)查找方法。
A.顺序&&&&&&&&&&&&&&&&
C.折半&&&&&&&&&&&&&&
对于一个线性表,若要求既能进行较快地插入和删除,又要求存储结构能够反映数据元素之间的逻辑关系,则应该(&&&&&
A.以顺序存储方式&&&
&&B.以链接存储方式&&&
C.以索引存储方式&&&&
&D.以散列存储方式
5.采用顺序查找方法查找长度为n的线性表时,每个元素的平均查找长度为(&&&
&&&&&&&&&&&&&&&&B.n/2&&&&&
C.(n+1)/2&&&&&&&&&
&&&D.(n-1)/2&&&
6.采用折半查找方法查找长度为n的线性表时,每个元素的平均查找长度为(&&
A.O(n*n)&&&&&&&&&&&&&&&&
B.O(nlog2n)
C.O(n)&&&&&&&&&&&&&&&&&
D.s(log2n)
7.哈希函数有一个共同的性质,即函数值应当以(&&&
)取其值域的每个值。
A.最大概率&&&&
&&&B.最小概率&&&&&&
&C.平均概率&&&&&&&
D.同等概率
8.有一个长度为10的有序表,按折半查找对该表进行查找,在等概率情况下查找成功的平均比较次数为(&&&
A.29/10&&
&&&&&B.31/10
&&&&&&C.26/10&&
&&&D.29/9
9.已知一个有序表为{11,22,33,44,55,66,77,88,99},则顺序查找元素55需要比较(&&
A.3&&&&&&&&
&&&&&&&&&C.5&&&&&&&
10.顺序查找法与二分查找法对存储结构的要求是(
A.顺序查找与二分查找均只是适用于顺序表
B.顺序查找与二分查找均既适用于顺序表,也适用于链表
C.顺序查找只是适用于顺序表&&&&&&
D.二分查找适用于顺序表
11.有数据{53,30,37,12,45,24,96},从空二叉树开始逐个插入数据来形成二叉排序树,若希望高度最小,应该选择的序列是(&&&
A.45,24,53,12,37,96,30&&&&&&
B.37,24,12,30,53,45,96&&&&&&&
C.12,24,30,37,45,53,96&&&&&&
D.30,24,12,37,45,96,53
12.对有18个元素的有序表作二分(折半)查找,则查找A[3]的比较序列的下标可能为(&&&
A.1、2、3&&&&&
&&&&&B.9、5、2、3&&&&&&&
C.9、5、3&&&&&&&
&&&D.9、4、2、3
对于顺序存储的有序表{5,12,20,26,37,42,46,50,64},若采用折半查找,则查找元素26的比较次数是(&&&
A.3&&&&&&&
14.关于哈希查找的说法正确的是(&& )。
A.除留余数法是最好的&&&&&&&&
哈希函数的好坏要根据具体情况而定&&&&&&
C.删除一个元素后,不管用哪种方法处理冲突,都只需简单地把该元素删除掉&&&&&&&
D.因为冲突是不可避免的,所以装填因子越小越好
15.在所有的排序方法中,关键字比较的次数与记录初始排列秩序无关的是(&&&&
冒泡排序&&&&&
B. 希尔排序&&
&&C. 直接选择排序& D.
直接插入排序
16.从未排序序列中依次取出元素与已经排好序的序列中的元素作比较。将其放入已排序序列的正确的位置上,此方法称为(&&&&&&&
插入排序&&&&&
B. 选择排序&&
&&C. 交换排序&
&&D. 归并排序
17.从未排序序列中挑选元素,并将其放入已排序序列的一端,此方法称为(&&&&&&
插入排序&&&&&
B. 交换排序&&
&&C. 选择排序&
&&D. 归并排序
18.依次将每两个相邻的有序表合并成一个有序表的排序方法称为(&&&&&
插入排序&&&&&
B. 交换排序&&
&&C. 选择排序&
&&D. 归并排序
19.当两个元素出现逆序的时候就交换位置,这种排序方法称为(&&&&&&
插入排序&&&&&
B. 交换排序&&
&&C. 选择排序&
&&D. 归并排序
20.每次把待排序的区间划分为左、右两个子区间,其中左区间中记录的关键字均小于等于基准记录的关键字,右区间中记录的关键字均大于等于基准记录的关键字,这种排序称为(&&&&&&&&
插入排序&&&&&
B. 快速排序&&
&&C. 堆排序&
21.在正常情况下,直接插入排序的时间复杂度为(&&&&&&
O(log2n)&&&&&
B. &O(n)&&
O(n log2n)& &D.
22.在正常情况下,冒泡排序的时间复杂度为(&&&&&&
O(log2n)&&&&&
B. &O(n)&&
O(n log2n)& &D.
23.在归并排序中,归并趟数的数量级为(&&&&&&
O(log2n)&&&&&
B. &O(n)&&
O(n log2n)& &D.
24.在待排序元素基本有序的情况下,效率最高的排序方法是(&&&&&&
插入排序&&&&&
B. 快速排序&&
&&C. 堆排序&
25.下面几种排序方法中,要求内存量最大的是(&&&&&
插入排序&&&&&
B. 交换排序&&
&&C. 选择排序&
&&D. 归并排序
26.在下列排序方法中,关键字比较的次数与记录的初始排列秩序无关的是(&&&&
希尔排序&&&&&
B. 冒泡排序&&
&&C. 插入排序
&&&D. 选择排序
27.快速排序方法在(&&&&&
)情况下最不利于发挥其长处。
要排序的数据量太大&&&&&
要排序的数据中含有多个相同值
要排序的数据已基本有序&&&
要排序的数据个数为奇数
28.下述几种排序方法中,平均情况下占用内存量最大的是(&&&&
插入排序&&&&&
B. 选择排序&&
&&C. 快速排序&
&&D. 归并排序
29.若构造一棵具有n个结点的二叉树排序,在最坏的情况下,其深度不会超过(&
n&&&&&&&&&
&&C. (n+1)/2&
30.对数据元素序列(49,72,68,13,38,50,97,27)进行排序,前三趟排序结果时的结果依次为:第一趟:49,72,68,13,38,50,97,27;第二趟:49,68,72,13,38,50,97,27;第三趟:13,49,68,72,38,50,97,27。该排序采用的方法是(&&
插入排序法&&&&&
B. 选择排序法&&
&&C. 冒泡排序法&
&&D.堆积排序法
31.对具有n个元素的任意序列采用插入排序法进行排序,排序趟数为(  )。
&&&&&&&&&&&&B.
n&&&&&&&&&
n+1&&&&&&&&&&
D. [log2n]
32.对序列(49,38,65,97,76,13,47,50)采用直接插入排序法进行排序,要把第七个元素47插入到已排序中,为寻找插入的合适位置需要进行(  )次元素间的比较。
&&&&&&&&&&&&&&&B.
4&&&&&&&&&&&
33.下面四种排序方法中,(  )是一种稳定性排序方法。
A. 插入排序法&&
选择排序法&&
&&C.快速排序法&
&&D.希尔排序法
34.一组记录的关键字序列为(46,79,56,38,40,84),利用快速排序,以第一个关键字为分割元素,经过一次划分后结果为(&&&
A.40,38,46,79,56,84&&&&
&B.40,38,46,84,56,79
C.40,38,46,56,79,84&&&&&
D.38,40,46,56,79,84
35.一组记录的关键字序列为(46,79,56,38,40,84),利用堆排序的方法建立的初始堆为(&&&
A.79,46,56,38,40,84&&&&
&&&B.84,79,56,38,40,46
C.84,79,56,46,
40,38,&&&&
D.84,56,79,40,46,38&
36.一组记录的关键字序列为(25,48,16,35,79,82,23,40,36,72),其中,含有5个长度为2的有序表,按归并排序的方法对该序列进行一趟归并后的结果为(&&&
A.16,25,35,48,23,40,79,82,36,72&&
B.16,25,35,48,79,82,23,36,40,72
C.16,25,48,35,79,82,23,36,40,72
D.16,25,35,48,79,23,36,40,82,72
37.已知10个数据元素为(54,28,16,34,73,62,95,60,26,43),对该数列从小到到大排序,经过一趟冒泡排序后的序列为(&&
A.16,28,34,54,73,62,60,26,43,95
B.28,16,34,54,62,73,60,26,43,95
C.28,16,34,54,62,60,73,26,43,95
D.16,28,34,54,62,60,73,26,43,95
38.用某种排序的方法对线性表(25,84,21,47,15,27,68,35,20)进行排序时,元素序列的变化情况如下:其所采用的排序方法是(&&&
(1)25,84,21,47,15,27,68,35,20
(2)20,15,21,25,47,27,68,35,84
(3)15,20,21,25,35,27,47,68,84
(4)15,20,21,25,27,35,47,68,84
A. 希尔排序&&
&&B.归并排序&
&&C.快速排序&&&
D. 直接选择排序
二、填空题
1.在各种查找方法中,平均查找长度与结点个数n无关的查找方法是&&&&
&&&&&&&&&&&&&&。
2.如果对查找表只进行查询某个特定的数据元素是否在查找表中,以及查找某个特定数据元素的各种属性两种类型的基本操作,而不进行插入和删除操作数据元素的查找表称为&&
&&&&&&&&&。
3.如果在查找表中进行查询的过程中,同时插入查找表中不存在的数据元素,或者从查找表中删除已存在的某个数据元素,则称此类查找表为&&&&&&&&&&&&&&
4.关键字是记录某个&&&&&&&&&&&&&&&
,用它可以识别、确定一个&&&&&&&&&
5.在一个查找表中,能够唯一地确定一个记录的关键字称为&&&&&&&&&&&
6.平均查找长度是指为确定记录在查找表中的位置,需要与给定值进行比较的关键字个数的&&&&&&&&&&&&&&&&
7.&&&&&&&&
查找是一种最简单的查找方法。
8.折半查找又称为&&&&&&&&&&&&
。使用该查找算法的前提条件是,查找表中记录相应的关键字值必须按&&&&&&&&&&&&&&&&&&&&
9.折半查找只适用于&&
&&&&&&&&&&&&的有序表
10.分块查找又称为&&&&&
&&&&&&&&&&&,它是一种介于&&&&&&&&&&&&&&
和折半查找之间的查找方法。
11.二叉排序树或者是一棵空树,或者是具有下列性质的一棵二叉树:
(1)若左子数不空,则左子树所有结点的值&&&&&&&&&&&&&&&&&&&&&&
(2)若右子数不空,则右子树所有结点的值&&&&&&&&&&&&&&&&&&&&&&
(3)左右子树又分别是&&&&&&&&&&&&&&&&&&&
12.哈希表是用来存放查找表中记录序列的表,每一个记录的存储位置是以该记录得到关键字为&&&&&&&&&&
,由相应哈希函数计算所得到的&&&&&&&&&&
13.在有序表A[1….18]中,采用二分查找算法查找元素值等于A[17]的元素,所比较过的元素的下标依次是&&&&&&&&&&&&&&&&&
14.根据排序过程中所用的存储器不同,可以将排序方法分为&&&&&&&&&&&&&
&&&&&&&&&&&
15.冒泡排序是一种比较简单的&&&&&&&&&&&&&
16.在对一组记录(50,40,95,20,15,70,60,45,80)进行直接插入排序时,当把第7个记录60插入到有序表时,为寻找插入位置需要比较&&&&&&&&
17.在归并排序中,在第3趟归并中,是把长度为&&&&&&
的有序表归并为长度为
18.在堆排序和快速排序中,若原始记录接近正序和反序,则选用&&&&&&&&&&&&
,若原始记录无序,则最好选用&&&&&&&&&&
19.对记录序列排序是指按记录的某个关键字排序,记录序列按_________排序结果是唯一的。
20.按某关键字对记录序列排序,&&&&&&&&&&&&
若在排序前和排序后仍保持它们的前后关系,则排序算法是稳定的,否则是不稳定的。
21.n个元素进行冒泡法排序,通常需要进行________趟冒泡,第j趟冒泡要进行______次元素间的比较。
22.当从一个小根堆中删除一个元素时,需要把&&&&&&&&&&
元素填补到&&&&&&&&
位置,然后再按条件把它逐层&&&&&&&&
三、综合题
1.已知序列(70,83,100,105,10,32,7,9),请写出对此序列采用插入排序法进行升序排序时各趟的结果。
2.已知序列(10,18,4,3,6,12,1,9,15,8),请写出对此序列采用归并排序法进行升序排序时各趟的结果。
3.已知序列(17,18,60,40,7,32,73,65,85)请给出采用冒泡排序法对该序列作升序排列时的每一趟结果。
4.已知序列(503,87,512,61,908,170,897,275,653,462)请给出采用快速排序法对该序列作升序排列时的每一趟结果。
5.设一组记录的关键字序列为(51,85,61,43,45,49),采用堆排序算法完成以下操作:(要求小根堆,并画出中间过程)
(1)以二叉树描述6个元素的初始堆
(2)以二叉树描述逐次取走堆顶元素后,经调整得到的5个元素、4个元素的堆
6.设查找表为(20,19,24,57,68,11)
&(1)用冒泡对该表进行排序,要求写出每一趟的排序过程,通常对n个元素进行冒泡排序要进行多少趟冒泡?第j趟要进行多少次元素间的比较?
&(2)在排序后的有序表的基础上,画出对其进行折半查找所对应的判定树.(要求以数据元素作为树结点)
&(3)求在等概率条件下,对上述有序表成功查找的平均查找长度。
7.(1) 设有查找表{8,17,5,9,21,10,7,19,6},依次取表中数据,构造一棵二叉排序树.
(2)说明如何通过序列的二叉排序树得到相应序列的排序结果,对上述二叉排序给出中序遍历的结果.
四、程序填空题
1.以下直接输入排序算法对存放在a[0],a[1],···,a[n-1]中,长度为n的记录序列按关键字key由小到大排序,完成程序中的空格部分。
void disort (NODE a[ ], int n)&
& int& I,j;
& for (i=1;i&n;i++)
temp=a[i];
(__①____&&temp.key&a[j].key)
a[j+1]=__&
_②__&& ___
&&&&&&&&&&
_____③______
a[j+1]=____④____;
2.以下冒泡法程序对存放在a[1],a[2],……,a[n]中的序列进行冒泡排序完成程序中的空格部分,其中n是元素个数,程序按升序排列。
Void bsort (NODE& a[ ], int)
& int i,j,
& for(j=1;
(1)&&&&&&&
&& {flag=0;
(2)&&&&&&
if(a[i].key&a[i+1].key)
{& flag=1;
&&&&&&&&&&
&temp=a[i];
&&&&&&&&&&
&(3)&&&&&&&
&&&&&&&&&&
(4)&&&&&&&&
if(flag= =0)
程序中flag的功能是
(5)&&&&&&&&&&&&&
五、算法设计题
1.写出在二叉树中删除一个结点的算法,且使删除后仍为二叉树,设删除的结点由指针p所指,其双亲结点由指针f所指,并假设被删除结点是其双亲结点的右孩子。
2.编写顺序查找算法。
六、完成:实验5――查找
&&&&&&&&&实验6——排序
根据实验要求(见教材P203)认真完成本实验,并提交实验报告。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 数据结构折半查找算法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信