9.2② 试分别画出在线性表(a,b,c,d,e,f,g)中进行折半查找 以查关键字等于e, f和g的过程。
时间: 2023-03-20 22:01:23 浏览: 260
首先,折半查找算法需要在有序的线性表中进行查找。给定线性表 `(a,b,c,d,e,f,g)`,我们需要先对其进行排序,使其变为有序的线性表,例如:
```
(a, b, c, d, e, f, g) -> (a, b, c, d, e, f, g) // 已经有序
```
接下来,我们可以按照以下步骤进行折半查找:
1. 确定查找区间的左右端点 `left` 和 `right`,初值分别为线性表的起始位置和终止位置;
2. 计算区间的中间位置 `mid`,即 `mid = (left + right) / 2`;
3. 比较中间位置的关键字与待查找关键字的大小,如果相等,则查找成功,返回该位置;如果中间位置的关键字大于待查找关键字,则在左半区间查找,即将右端点更新为 `mid - 1`;否则,在右半区间查找,即将左端点更新为 `mid + 1`;
4. 重复步骤2和步骤3,直到找到关键字或者区间为空。
下面分别画出在线性表 `(a,b,c,d,e,f,g)` 中进行折半查找以查找关键字等于 `e`, `f` 和 `g` 的过程。
查找 `e`:
```
(a, b, c, d, e, f, g)
↑ // left = 0, right = 6, mid = 3, a[mid] < e
↑ // left = 4, right = 6, mid = 5, a[mid] > e
↑ // left = 4, right = 4, mid = 4, a[mid] == e
```
查找 `f`:
```
(a, b, c, d, e, f, g)
↑ // left = 0, right = 6, mid = 3, a[mid] < f
↑ // left = 4, right = 6, mid = 5, a[mid] == f
```
查找 `g`:
```
(a, b, c, d, e, f, g)
↑ // left = 0, right = 6, mid = 3, a[mid] < g
↑ // left = 6, right = 6, mid = 6, a[mid] == g
```
阅读全文