用C语言编写一个程序,满足任意输入10个数,先将其按由大到小的顺序排列;再输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出无此数”。
时间: 2023-12-10 21:42:33 浏览: 96
下面是使用C语言编写的程序,满足输入10个数,先将其按由大到小的顺序排列,再输入一个数,用折半查找法找出该数是数组中第几个元素的值,如果该数不在数组中,则打印出无此数。
```c
#include <stdio.h>
void sort(int arr[], int n);
int binary_search(int arr[], int n, int target);
int main() {
int arr[10];
int target;
printf("请输入10个整数:");
for (int i = 0; i < 10; i++) {
scanf("%d", &arr[i]);
}
sort(arr, 10);
printf("排序后的数组为:");
for (int i = 0; i < 10; i++) {
printf("%d ", arr[i]);
}
printf("\n请输入要查找的数:");
scanf("%d", &target);
int index = binary_search(arr, 10, target);
if (index == -1) {
printf("无此数\n");
} else {
printf("%d 是数组中第 %d 个元素的值\n", target, index + 1);
}
return 0;
}
void sort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] < arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int binary_search(int arr[], int n, int target) {
int left = 0;
int right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] > target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
```
首先在 `main` 函数中,我们定义了一个大小为10的整型数组 `arr`,并从用户输入中读入10个整数。然后我们调用 `sort` 函数对数组进行排序,并输出排序后的结果。
接着,我们从用户输入中读入要查找的数 `target`,并调用 `binary_search` 函数进行折半查找。如果 `binary_search` 函数返回 `-1`,表示要查找的数不在数组中,我们输出“无此数”;否则,我们输出查找结果。
`sort` 函数使用的是冒泡排序算法,它可以将数组中的元素按照由大到小的顺序排列。
`binary_search` 函数使用的是折半查找算法。它首先将数组中间位置的元素与要查找的数进行比较,如果相等则返回中间位置,否则根据比较结果缩小查找范围,直到找到要查找的数或者查找范围为空为止。如果要查找的数不在数组中,则返回 `-1`。
阅读全文