第九章 查找
1、画出由下列元素[22,32,18,2,8,23,67,16]构造的二叉排序树。
2、已知一个有序表 ( 15, 26, 34, 39, 45, 56, 58, 63, 74, 76, 83, 94 ) 顺序存储于一维数组a[12]中,根据折半搜索过程填写成功搜索下表中所给元素34, 56, 58, 63, 94时的比较次数。
元素值
比较次数
根据算法,
对于34,第一次查找下标为(0+11)/2的元素56,
比较后接着查找下标为(0+4)/2的元素34
,找到了,查找次数为2.对于56,
查找次数为1.对于58,
第一次查找下标为(0+11)/2的元素56,比较后第二次查找下标为
(6+11)/2的元素74,
比较后第三次查找下标为(6+7)/2元素58,查找次数为3.对于63,
查找次数为4.对于94,查找次数为4.
3、设散列表的长度为13,散列函数为H(k)=k%13,给定的关键码序列为19,14,23,01,68,20,84,27。试画出用线性探查法解决冲突时所构成的散列表。
0 1 2 3 4 5 6 7 8 9 10 11 12
1 2 1 4 1 1 3 1
查找成功的ASL=(1*5+2*1+3*1+4*1)/8
4、已知线性表的关键字集合{19,14,23,01,68,20,84,27,55,11,10,79
},已知散列函数为H(k)=k MOD 13,采用拉链法处理冲突,画计出该开散列表的结构。
补:
二、单项选择题(每小题1分,共27分)
( B )1.在表长为n的链表中进行线性查找,它的平均查找长度为
A. ASL=n; **B. ASL=(n+1)/2;**
C. ASL=+1; D. ASL≈log2(n+1)-1
(1+2+3+---+n)/n
( A )2.【计研题2001】
折半查找有序表(4,6,10,12,20,30,50,70,88,100)。
若查找表中元素58,则它将依次与表中 比较大小,查找结果是失败。
A.20,70,30,50 B.30,88,70,50
C.20,50 D.30,88,50
(0+9)/2=4号元素20
58>20所以在20的右半边找
(5+9)/2=7号元素70
58<70所以在70的左半边存找
(5+6)/2=5号元素30
58>30不是则看6号50
( C )3.【计研题2001】对22个记录的有序表作折半查找,当查找失败时,至少需要比较 次关键字。
A.3 B.4 C.5 D. 6
不成功logn(以2为底)+1=4+1=5
成功:log(n+1)-1
( A )4. 链表适用于 查找
A.顺序 B.二分法 C.顺序,也能二分法 D.随机
( C )5. 折半搜索与二叉搜索树的时间性能
A. 相同 B. 完全不同 C. 有时不相同 D. 数量级都是O(log2n)
第十章 排序
1、有初始的无序序列为{98,65,40,12,51,100,77,88},给出对其进行快速排序(升序)的每一趟的结果。
98 65 40 12 51 100 77 88
1.挖掉基准数98
__ 65 40 12 51 100 77 88
从右到左找到第一个比98小的数88填上面坑
(2)88 65 40 12 51 100 77 __
从左到右找到第一个比98打的上个数填上面的坑
(3)88 65 40 12 51 __ 77 100
重复2.3步
找到77
88 65 40 12 51 77 __ 100
i==j此时
把基准数填进
88 65 40 12 51 77 98 100 这是第一趟排序
此时98的左边的数字都比他小,右边的数字都比他大
再对88-65进行排序
__ 65 40 12 51
51 65 40 12 __ i==j
51 65 40 12
__ 65 40 12
12 65 40 __
12 __ 40 65
12 40 __ 65 i==j
12 40 51 65
result:12 40 51 65 88 98 100
2、已知有一关键字序列为{37,42,17,99,12,9,24,52,11,30},如果我们采用冒泡法进行排序(按照升序排列),请给出每一趟排序的结果。
37 42 17 99 12 9 24 52 11 30
37 17 42 12 9 24 52 11 30 99
-------
3、设有关键字序列为{10,18,4,3,6,12,1,9,15,8},请给出用希尔排序每一趟的结果。增量序列取为5,3,2,1。(每一趟1.5分,共6分)
10 1 4 3 6 12 18 9 15 8 第一次
10,3,18,8
1 6 9
4 12 15
3 8 10 18
1 6 9
4 12 15
3 1 4 8 6 12 10 9 15 18 第二次
3 4 6 10 15
1 8 12 9 18
3 1 4 8 6 9 10 12 15 18 第三次
1 3 4 6 8 9 10 12 15 18 第四次
、、
4、有初始的无序序列为{98,65,38,40,12,51,100,77,26,88},给出对其进行归并排序(升序)的每一趟的结果。
98 65 38 40 12 51 100 77 26 88
65 98 38 40 12 51 77 100 26 88
38 40 65 98 12 51 77 100 26 88
12 38 40 51 65 77 98 100 26 88
12 26 38 40 51 65 77 88 98 100