折半查找问题 问题描述:已知11个元素的有序数组为(05,13,19,21,37,56,64,75,80,88,92),要求在有序数组中查找关键字为key的元素是否存在。 基本要求: (1)编写折半查找元素的算法 (2)编写一个测试主函数
时间: 2023-10-07 14:10:27 浏览: 164
以下是折半查找的算法实现和测试主函数:
```c
#include <stdio.h>
#define MAX_SIZE 11
int BinarySearch(int a[], int n, int key) {
int low = 0, high = n - 1, mid;
while (low <= high) {
mid = (low + high) / 2;
if (a[mid] == key) {
return mid;
} else if (a[mid] < key) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1;
}
int main() {
int a[MAX_SIZE] = {5, 13, 19, 21, 37, 56, 64, 75, 80, 88, 92};
int key, index;
printf("请输入要查找的元素:");
scanf("%d", &key);
index = BinarySearch(a, MAX_SIZE, key);
if (index == -1) {
printf("元素 %d 不存在\n", key);
} else {
printf("元素 %d 存在,下标为 %d\n", key, index);
}
return 0;
}
```
该程序使用了折半查找的算法实现,在有序数组a中查找元素key。程序先从控制台获取要查找的元素,然后调用BinarySearch函数查找元素,并返回元素在数组中的下标,如果元素不存在则返回-1。最后,程序输出查找结果。
阅读全文