在顺序表{1,2,3,4,5,6,7,8,9,10}中采用二分查找法查找关键字9的过程
时间: 2024-06-04 13:06:52 浏览: 28
二分查找法是一种在有序数组中查找特定元素的算法。下面是在顺序表 {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 中采用二分查找法查找关键字 9 的过程:
1. 确定查找范围的起始位置 left 和结束位置 right,初始时 left = 0,right = 9;
2. 计算中间位置 mid = (left + right) / 2,即 mid = 4;
3. 将关键字 9 与顺序表中的第 mid 个元素比较,发现 9 大于 5,说明要在 mid 右侧继续查找;
4. 更新查找范围的起始位置 left = mid + 1,即 left = 5;
5. 重新计算中间位置 mid = (left + right) / 2,即 mid = 7;
6. 将关键字 9 与顺序表中的第 mid 个元素比较,发现 9 小于 8,说明要在 mid 左侧继续查找;
7. 更新查找范围的结束位置 right = mid - 1,即 right = 6;
8. 重新计算中间位置 mid = (left + right) / 2,即 mid = 5;
9. 将关键字 9 与顺序表中的第 mid 个元素比较,发现 9 等于 9,说明找到了关键字;
10. 返回关键字 9 在顺序表中的下标 8。
因此,关键字 9 在顺序表中的下标为 8。
相关问题
设计一个算法,输出在顺序表{1,2,3,4,5,6,7,8,9,10}中采用二分查找法查找关键字9的过程。
二分查找法(又称折半查找法)是一种效率较高的查找方法,适用于有序的线性表。它的基本思想是:在有序表中,取中间位置的记录作为比较对象,若给定值与中间位置的记录的关键字相等,则查找成功;若给定值小于中间位置的记录的关键字,则在中间位置的左半区继续查找;若给定值大于中间位置的记录的关键字,则在中间位置的右半区继续查找,直到查找成功或者查找失败为止。
对于顺序表 {1, 2, 3, 4, 5, 6, 7, 8, 9, 10},若要查找关键字 9,其具体过程如下:
1. 确定该顺序表的中间位置 mid = (0 + 9) / 2 = 4。
2. 比较中间位置的记录 5 与关键字 9,由于 5 < 9,故在右半区继续查找。
3. 确定右半区的中间位置 mid = (5 + 9) / 2 = 7。
4. 比较中间位置的记录 8 与关键字 9,由于 8 < 9,故在右半区继续查找。
5. 确定右半区的中间位置 mid = (8 + 9) / 2 = 8。
6. 比较中间位置的记录 9 与关键字 9,由于相等,则查找成功。
因此,使用二分查找法查找关键字 9 在该顺序表中的过程为:4 -> 7 -> 8 -> 查找成功。
设计一个算法,输出在顺序表{1,2,3,4,5,6,7,8,9,10}中采用二分查找法查找关键字9的代码
以下是采用二分查找法查找关键字9的代码:
```
int binarySearch(int arr[], int left, int right, int key) {
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == key) {
return mid;
}
else if (arr[mid] < key) {
left = mid + 1;
}
else {
right = mid - 1;
}
}
return -1;
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int n = sizeof(arr) / sizeof(arr[0]);
int key = 9;
int index = binarySearch(arr, 0, n - 1, key);
if (index != -1) {
cout << "The key is found at index: " << index << endl;
}
else {
cout << "The key is not found!" << endl;
}
return 0;
}
```
该算法的时间复杂度为 $O(\log n)$,其中 $n$ 是顺序表的长度。