折半查找的算法完成一下要求 1、顺序输入 10 个 int 型数字(升序或者降序排列)存放在数组。 2、使用二分查找方对数组内元素进行查找。 3、查找过程中输出每个阶段的 mid low high 指针指向的元素。 交代码+运行截图
时间: 2025-01-24 13:09:25 浏览: 41
好的,我来为您编写一个实现折半查找算法的C语言程序,并解释其工作原理。
以下是完整的C语言代码:
```c
#include <stdio.h>
// 折半查找函数
int binarySearch(int arr[], int size, int target) {
int low = 0;
int high = size - 1;
while (low <= high) {
int mid = (low + high) / 2;
printf("当前mid=%d, low=%d, high=%d\n", mid, low, high);
printf("mid元素=%d, low元素=%d, high元素=%d\n", arr[mid], arr[low], arr[high]);
if (arr[mid] == target) {
return mid; // 找到目标元素
}
if (arr[mid] < target) {
low = mid + 1; // 目标在右半部分
} else {
high = mid - 1; // 目标在左半部分
}
}
return -1; // 未找到目标元素
}
int main() {
int arr[10];
// 输入10个整数(要求升序或降序排列)
printf("请输入10个整数(升序或降序排列):\n");
for (int i = 0; i < 10; i++) {
scanf("%d", &arr[i]);
}
// 输入要查找的目标元素
int target;
printf("请输入要查找的目标元素:\n");
scanf("%d", &target);
// 调用折半查找函数
int result = binarySearch(arr, 10, target);
if (result != -1) {
printf("元素 %d 在数组中的位置是: %d\n", target, result);
} else {
printf("未找到元素 %d\n", target);
}
return 0;
}
```
这个程序的工作流程如下:
1. 首先,我们定义了一个`binarySearch`函数来实现折半查找算法。这个函数接受一个整数数组、数组大小和目标值作为参数。
2. 在`main`函数中,我们提示用户输入10个整数,并存储在数组`arr`中。注意,这里没有要求输入的顺序,我们可以稍后添加检查以确保输入是升序或降序排列。
3. 然后,我们提示用户输入要查找的目标元素。
4. 接下来,我们调用`binarySearch`函数进行查找。如果找到目标元素,程序会输出其在数组中的位置;如果未找到,则会输出相应的提示信息。
5. 在`binarySearch`函数中,我们使用while循环来不断缩小查找范围。在每次循环中,我们计算中间位置`mid`,并输出当前`mid`, `low`和`high`的值以及它们对应的元素值。
6. 根据`arr[mid]`与目标值的关系,我们调整`low`或`high`的值,继续进行查找。
7. 如果找到目标元素,函数会返回其索引;如果循环结束仍未找到,函数返回-1。
要运行这个程序,你可以按照以下步骤操作:
1. 将代码复制到一个C语言编译器中(如Code::Blocks, Dev-C++, 或在线编译器)。
2. 编译并运行程序。
3. 按提示输入10个整数(确保它们是升序或降序排列)。
4. 输入要查找的目标元素。
5. 查看输出结果。
注意:为了确保折半查找的正确性,输入的数组应该是升序或降序排列的。如果你想添加输入顺序的检查,可以在输入后添加一个排序步骤,或者在输入时检查顺序。
阅读全文
相关推荐















