任意输入10个数,先将其按由大到小的顺序排列;再输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出“无此数”。用C语言编写
时间: 2024-03-13 09:46:33 浏览: 27
好的,下面是完整的 C 代码实现:
```c
#include <stdio.h>
// 折半查找法
int binary_search(int arr[], int n, int key) {
int low = 0, high = n - 1, mid;
while (low <= high) {
mid = (low + high) / 2;
if (arr[mid] == key) {
return mid;
} else if (arr[mid] > key) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return -1;
}
int main() {
int arr[10];
int i, j, n, key, pos;
// 输入10个数
printf("请输入10个数:\n");
for (i = 0; i < 10; i++) {
scanf("%d", &arr[i]);
}
// 排序
for (i = 0; i < 9; i++) {
for (j = i + 1; j < 10; j++) {
if (arr[i] < arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
// 输出排序后的数组
printf("排序后的数组为:\n");
for (i = 0; i < 10; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// 折半查找
printf("请输入要查找的数:\n");
scanf("%d", &key);
pos = binary_search(arr, 10, key);
if (pos == -1) {
printf("无此数\n");
} else {
printf("%d 是数组中第 %d 个元素的值\n", key, pos + 1);
}
return 0;
}
```
输入示例:
```
请输入10个数:
10 5 8 3 7 2 9 4 6 1
排序后的数组为:
10 9 8 7 6 5 4 3 2 1
请输入要查找的数:
9
9 是数组中第 2 个元素的值
```
阅读全文