用c语言编写,任意输入10个数,先将其按由大到小的顺序排列;再输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出“无此数”。
时间: 2024-02-19 08:59:02 浏览: 81
c代码-输入两个正整数m和n,求其最大公约数和最小公倍数。
好的,这是一个比较典型的排序和查找问题,下面是代码实现:
```c
#include <stdio.h>
// 交换两个数的值
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 冒泡排序,将数组按由大到小的顺序排列
void bubbleSort(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]) {
swap(&arr[j], &arr[j + 1]);
}
}
}
}
// 折半查找,返回查找到的元素下标
int binarySearch(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;
}
int main() {
int arr[10];
printf("请输入10个整数:\n");
for (int i = 0; i < 10; i++) {
scanf("%d", &arr[i]);
}
bubbleSort(arr, 10);
printf("排序后的数组为:\n");
for (int i = 0; i < 10; i++) {
printf("%d ", arr[i]);
}
printf("\n请输入要查找的数:\n");
int target;
scanf("%d", &target);
int index = binarySearch(arr, 10, target);
if (index == -1) {
printf("无此数\n");
} else {
printf("%d 是数组中第 %d 个元素的值\n", target, index + 1);
}
return 0;
}
```
代码说明:
1. `swap` 函数用于交换两个数的值。
2. `bubbleSort` 函数用于对数组进行冒泡排序,将数组按由大到小的顺序排列。
3. `binarySearch` 函数用于折半查找,返回查找到的元素下标。
4. 在 `main` 函数中,首先输入10个整数,然后调用 `bubbleSort` 进行排序,再输入要查找的数,最后调用 `binarySearch` 进行查找并输出结果。
阅读全文