问答题
已知如下11个数据元素的有序表(6,14,19,21,36,57,63,76,81,89,93),请画出查找键值为21(成功)和85(失败)的查找过程。
【正确答案】对有序表(设有序表为A,其中某关键字为A[i].key)的查找可采用二分法进行。
设变量low、high和mid分别表示待查有序表的下界、上界和中间位置,即:
mid=(low+high)/2。初值low=1,high=11,具体如下:
序号: 1 2 3 4 5 6 7 8 9 10 11
关键字: 6 14 19 21 36 57 63 76 81 89 93
变量: ↑low ↑high
(1)以下给出键值key=21的查找过程:
由初始low=1,high=11,求得mid=6,如下所示:
序号: 1 2 3 4 5 6 7 8 9 10 11
关键字: 6 14 19 21 36 57 63 76 81 89 93
变量: ↑low ↑mid ↑highI
因为A[mid].key=A[6].key>key,即57>21,所以,继续在前半区进行查找。low值不变,high=mid-1=5,mid=(1+5)/2=3。如下所示:
序号: 1 2 3 4 5 6 7 8 9 10 11
关键字: 6 14 19 21 36 57 63 76 81 89 93
变量: ↑low ↑mid ↑high
又因为A[mid].key=A[3].key<key,即19<21,所以,继续在后半区进行查找。high值不变,low=mid+1=3+1=4,mid=(4+5)/2=4。如下所示:
序号: 1 2 3 4 5 6 7 8 9 10 11
关键字: 6 14 19 21 36 57 63 76 81 89 93
变量: ↑low ↑high
↑mid
由于A[mid].key=A[4].key=21,此值与给定关键字21相等,查找成功。
(2)以下给出键值key=85的查找过程:
由初始low=1,high=11,求得mid=6,如下所示:
序号: 1 2 3 4 5 6 7 8 9 10 11
关键字: 6 14 19 21 36 57 63 76 81 89 93
变量: ↑low ↑mid ↑high
因为A[mid].key=A[6].key<key,即57<85,所以,继续在后半区进行查找。high值不变,low=mid+1=7,mid=(7+11)/2=9。如下所示:
序号: 1 2 3 4 5 6 7 8 9 10 11
关键字: 6 14 19 21 36 57 63 76 81 89 93
变量: ↑low ↑mid ↑high
又因为A[mid].key=A[9].key<key,即81<85,所以,继续在后半区进行查找。high值不变,low=mid+1=10,mid=(10+11)/2=10。如下所示:
序号: 1 2 3 4 5 6 7 8 9 10 11
关键字: 6 14 19 21 36 57 63 76 81 89 93
变量: ↑low ↑high
↑mid
因为A[mid].key=A[10].key>key,即89>85,所以,继续在前半区进行查找。low值不变,high=mid-1=10-1=9,mid=(10+9)/2=9。如下所示:
序号: 1 2 3 4 5 6 7 8 9 10 11
关键字: 6 14 19 21 36 57 63 76 81 89 93
变量: ↑high ↑low
↑mid
此刻,由于下界low>上界high,说明表中没有关键字值等于85的元素,查找失败。
【答案解析】