分别画出在线性表(a,b,c,d,e,f,g)中进行折半查找关键码e和g的过程。
时间: 2023-10-11 12:13:09 浏览: 39
假设线性表中元素已经按照关键码从小到大排好序。
折半查找的过程如下:
1. 定义左右指针left和right,分别指向线性表的第一个元素和最后一个元素。
2. 计算中间位置mid,即mid=(left+right)/2。
3. 将中间位置的元素与待查找关键码进行比较:
- 如果中间位置的元素等于待查找关键码,则查找成功,返回该元素的位置。
- 如果中间位置的元素大于待查找关键码,则在左半部分继续查找,即令right=mid-1。
- 如果中间位置的元素小于待查找关键码,则在右半部分继续查找,即令left=mid+1。
4. 重复上述步骤,直到找到元素或者左右指针相遇。如果左右指针相遇仍未找到元素,则查找失败。
以关键码e为例,查找过程如下:
| | a | b | c | d | e | f | g |
| :-: |:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| i | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| L | 0 | | | | | | |
| R | 6 | | | | | | |
| M | 3 | | | | | | |
此时中间位置的元素为d,小于待查找关键码e,因此在右半部分继续查找。更新左右指针:
| | a | b | c | d | e | f | g |
| :-: |:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| i | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| L | 4 | | | | | | |
| R | 6 | | | | | | |
| M | 5 | | | | | | |
此时中间位置的元素为f,大于待查找关键码e,因此在左半部分继续查找。更新左右指针:
| | a | b | c | d | e | f | g |
| :-: |:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| i | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| L | 4 | | | | | | |
| R | 4 | | | | | | |
| M | 4 | | | | | | |
此时左右指针相遇,查找失败,因为线性表中不存在关键码为e的元素。
以关键码g为例,查找过程如下:
| | a | b | c | d | e | f | g |
| :-: |:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| i | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| L | 0 | | | | | | |
| R | 6 | | | | | | |
| M | 3 | | | | | | |
此时中间位置的元素为d,小于待查找关键码g,因此在右半部分继续查找。更新左右指针:
| | a | b | c | d | e | f | g |
| :-: |:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| i | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| L | 4 | | | | | | |
| R | 6 | | | | | | |
| M | 5 | | | | | | |
此时中间位置的元素为f,小于待查找关键码g,因此在右半部分继续查找。更新左右指针:
| | a | b | c | d | e | f | g |
| :-: |:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| i | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| L | 6 | | | | | | |
| R | 6 | | | | | | |
| M | 6 | | | | | | |
此时中间位置的元素为g,等于待查找关键码g,查找成功,返回元素位置6。
阅读全文