用c语言编写一个程序任意输入10个数,先将其按由大到小的顺序排列;再输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出“无此数”。
时间: 2024-03-08 15:51:14 浏览: 55
好的,下面是代码实现:
```c
#include <stdio.h>
// 交换两个数的值
void swap(int *a, int *b){
int temp = *a;
*a = *b;
*b = temp;
}
// 由大到小排序
void sort(int arr[], int n){
int i, j;
for(i = 0; i < n - 1; i++){
for(j = i + 1; j < n; j++){
if(arr[i] < arr[j]){
swap(&arr[i], &arr[j]);
}
}
}
}
// 折半查找
int binarySearch(int arr[], int n, int x){
int left = 0, right = n - 1, mid;
while(left <= right){
mid = (left + right) / 2;
if(arr[mid] == x){
return mid + 1; // 返回元素下标
}
else if(arr[mid] > x){
left = mid + 1; // 右半部分查找
}
else{
right = mid - 1; // 左半部分查找
}
}
return -1; // 数组中不存在该元素
}
int main(){
int arr[10];
int n = sizeof(arr) / sizeof(arr[0]);
int i, x;
// 输入10个数
printf("请输入10个数:\n");
for(i = 0; i < n; i++){
scanf("%d", &arr[i]);
}
// 由大到小排序
sort(arr, n);
// 输出排序后的结果
printf("排序后的结果为:\n");
for(i = 0; i < n; i++){
printf("%d ", arr[i]);
}
// 输入需要查找的数
printf("\n请输入需要查找的数:");
scanf("%d", &x);
// 折半查找
int res = binarySearch(arr, n, x);
if(res == -1){
printf("无此数\n");
}
else{
printf("%d 是数组中第 %d 个元素的值\n", x, res);
}
return 0;
}
```
这个程序可以实现你的要求,首先输入10个数,然后对这10个数从大到小排序;接着输入需要查找的数,使用折半查找法查找该数在数组中的位置,如果存在则输出该数是数组中第几个元素的值,否则输出“无此数”。
阅读全文