一组数据为[21,34,56,78,99,100,102,109,200],要求如下: (1)写出折半查找算法查找109的过程中所比较过的数据。 (2)写出折半查找算法查找20的过程中所比较过的数据
时间: 2023-10-26 18:41:15 浏览: 86
好的,我来回答你的问题。
(1) 折半查找算法查找109的过程中所比较过的数据依次为:[99, 102, 109]。
首先,算法将数据分成两半,取中间位置的值 78 进行比较,109 大于 78,因此查找范围缩小到右半部分。接着,算法将右半部分的数据再次分成两半,取中间位置的值 100 进行比较,109 大于 100,因此查找范围缩小到右半部分。最后,算法将右半部分的数据再次分成两半,取中间位置的值 102 进行比较,109 大于 102,因此查找范围缩小到右半部分。此时,109 等于 109,查找成功。
(2) 折半查找算法查找20的过程中所比较过的数据依次为:[56, 21]。
首先,算法将数据分成两半,取中间位置的值 78 进行比较,20 小于 78,因此查找范围缩小到左半部分。接着,算法将左半部分的数据再次分成两半,取中间位置的值 56 进行比较,20 小于 56,因此查找范围缩小到左半部分。最后,算法将左半部分的数据再次分成两半,取中间位置的值 34 进行比较,20 小于 34,因此查找范围缩小到左半部分。此时,数据中已经没有比 20 更小的元素,查找失败。
相关问题
使用 C++设计一个程序,功能如下:从文件“input.txt”中读入数据(一组二维坐标(x,y)),文件格式如下: 34.1 45,44 -323.67 493.56 42.55 -89.22 34.11 99.56 …… 每行第一个数为 x,第二个数为 y。读取数据后,通过按键控制程序: 1. 输入字符为‘s’时,在屏幕上显示所有坐标
以下是使用 C++ 实现的程序,可以读取“input.txt”文件中的坐标,并在按下字符 `s` 后在屏幕上显示这些坐标:
```c++
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main() {
ifstream infile("input.txt");
vector<pair<double, double>> coordinates;
double x, y;
while (infile >> x >> y) {
coordinates.push_back(make_pair(x, y));
}
char c;
while (true) {
cout << "Press 's' to display all coordinates: ";
cin >> c;
if (c == 's') {
for (auto coord : coordinates) {
cout << "(" << coord.first << ", " << coord.second << ")" << endl;
}
break;
}
}
return 0;
}
```
这个程序首先打开“input.txt”文件并读取其中的坐标,将每个坐标表示为一个 `pair<double, double>` 类型的元组,并存储在名为 `coordinates` 的向量中。然后,程序进入一个循环,等待用户输入字符。如果用户输入字符 `s`,则程序使用一个循环遍历 `coordinates` 向量中的所有坐标,并在屏幕上打印出来。循环终止并退出程序。
从文件“input.txt”中读入数据(一组二维坐标(x,y)),文件格式如下: 34.1 45,44 -323.67 493.56 42.55 -89.22 34.11 99.56 ……
好的,你可以使用以下 Python 代码来读取“input.txt”文件中的数据:
```python
with open('input.txt', 'r') as f:
data = f.read().split()
coordinates = []
for i in range(0, len(data), 2):
x = float(data[i])
y = float(data[i+1])
coordinates.append((x, y))
```
这个代码将文件中的数据读取到列表 `coordinates` 中,并将每个坐标表示为一个元组 `(x, y)`。现在你可以使用 `coordinates` 列表来进行后续处理。
阅读全文