算法--查找

声明:本文章并非原创 只是分享一些学习经验

1.就平均查找长度而言,分块查找最小,折半查找次之,顺序查找最大()

正确答案: B   你的答案: A (错误)

 

2.分快查找,是将顺序表分为若干块,块内元素顺序任意,块间有序,即前一块中的最大值小于后一块中的最小值。并且有一张索引表,每一项存放每一块的最大值和指向该块第一个元素的指针。索引表有序,块内无序。所以,块间查找用二分查找,块内用顺序查找,效率介于顺序和二分之间。

 

任一查找树(二叉分类树)的平均查找时间都小于用顺序查找法查找同样结点的线性表的平均查找时间()

正确答案: B   你的答案: A (错误)

只有左子树或者右子树的BST就是一样的了

 

3.对有18个元素的有序表做折半查找,则查找A[3]的比较序列的下标依次为()

正确答案: D   你的答案: B (错误)

1-2-3

9-5-2-3

9-5-3

9-4-2-3

 

4.就平均查找速度而言,下列几种查找速度从慢至快的关系是___________

正确答案: B   你的答案: B (正确)

顺序折半哈希分块

顺序分块折半哈希

分块折半哈希顺序

顺序哈希分块折半

 

 

5.顺序查找法适用于存储结构为顺序或链接存储的线性表。

正确答案: A   你的答案: A (正确)

T

F

 

6.红黑树中已经有n个数据,寻找某个key是否存在的时间复杂度为()

正确答案: A   你的答案: A (正确)

o(logn)

o(n)

o(n二次方)

o(1)

红黑树是平衡二叉树,也就是左右子树是平衡的,高度大概相等。

这种情况等价于一块完全二叉树的高度,查找的时间复杂度是树的高度,为logn

 

7.在长度为n的顺序线性表中顺序查找值为x的元素时,查找成功时的平均查找长度(假定查找每个元素的概率均相等)为()。

正确答案: D  你的答案: C (错误)

n
(n-1)/2
n/2
(n+1)/2

长度为n的线性表顺序查找x,则查找次数可能是1,2,3,…,n次,则和sumn*(1+n)/2,所以平均查找次数为sum/n=(n+1)/2

 

8.设有一组关键字序列{5,8,14,20,31,55,78,81,93,97,111},使用二分(折半)法查找关键字93需要进行多少次比较()

正确答案: A   你的答案: C (错误)

2

3

4

5

A

5,8,14,20,31,55,78,81,93,97,111

索引为0-10 

第一次 left=0,right=10,mid=(left+right)/2=5; 索引为5的为55

第二次 left=mid+1=6 ,right=10;mid=(left+right)/2=8;索引为8的为93.。到此比较完毕

 

 

9.已知有序序列b c d e f g q r s t,则在二分查找关键字b的过程中,先后进行比较的关键字依次是多少?()

正确答案: B   你的答案: A (错误)

f d b

f c b

g c b

g d b

b c d e f g q r s t 二分查找,折半法

low = 0,high =9,mid = (low+ high)/2=4,    ‘b’比较a[4]=’f’,<,找左边 ( b~e )

low = 0,high =mid-1 = 3, mid = 3/2=1,  ‘b’比较a[1]=’c’ , <,找左边(b~b

low = 0,high =mid -1 = 0,mid = 0, ‘b’ 比较a[0] = ‘b’,找到(若未找到,low=high,也停止查找)

所以比较的顺序就是f c b

 

 

10.下面程序段的功能是实现二分查找算法,请在下划线处填上正确的语句。

structrecord{int key; int others;};

intbisearch(struct record r[ ], int k)

{

intlow=0,mid,high=n-1;

while(low<=high)

{

______________ 1 __________________;

if(r[mid].key==k)return(mid+1); else if(_____ 2 _______)high=mid-1;else low=mid+1;

}

return(0);

}

你的答案 (错误)

1

参考答案 mid=(low+high)/2

 

2

参考答案 r[mid].key>k

点赞