问题描述:已知11个元素的有序数组为(05,13,19,21,37,56,64,75,80,88,92),要求在有序数组中查找关键字为key的元素是否存在 基本要求:1.编写折半查找元素的算法。2.编写一个测试主函数。3.用c语言解决
时间: 2023-12-09 18:05:37 浏览: 131
第十四届全国青少年信息学奥林匹克联赛初赛试题NOIPCSP竞赛比赛CSP考级.pdf
好的,这是一个典型的折半查找问题。以下是C语言的实现代码:
```c
#include <stdio.h>
int binary_search(int arr[], int len, int key) {
int left = 0;
int right = len - 1;
while (left <= right) {
int mid = (left + right) / 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[] = {05, 13, 19, 21, 37, 56, 64, 75, 80, 88, 92};
int len = sizeof(arr) / sizeof(arr[0]);
int key = 37;
int index = binary_search(arr, len, key);
if (index != -1) {
printf("元素 %d 在有序数组中的下标为 %d\n", key, index);
} else {
printf("元素 %d 不在有序数组中\n", key);
}
return 0;
}
```
运行结果为:
```
元素 37 在有序数组中的下标为 4
```
可以看到,折半查找算法成功地找到了关键字为37的元素在有序数组中的下标。
阅读全文