编写要求为:将15个数按由大到小的顺序存放在一组数组中,输入一个数,要求用折半查找出该数为数组中的第几个元素值。如果该数不在数组中,则输出“无此数”。的代码
时间: 2025-01-05 14:48:32 浏览: 13
以下是一个用C语言编写的程序,满足你的要求:
```c
#include <stdio.h>
// 函数声明
void bubbleSort(int arr[], int n);
int binarySearch(int arr[], int n, int target);
int main() {
int numbers[15];
int input, position;
// 输入15个数
printf("请输入15个整数:\n");
for (int i = 0; i < 15; i++) {
scanf("%d", &numbers[i]);
}
// 将数组按由大到小排序
bubbleSort(numbers, 15);
// 输入要查找的数
printf("请输入要查找的数:\n");
scanf("%d", &input);
// 进行折半查找
position = binarySearch(numbers, 15, input);
// 输出结果
if (position != -1) {
printf("该数在数组中的第 %d 个位置。\n", position + 1);
} else {
printf("无此数。\n");
}
return 0;
}
// 冒泡排序函数(由大到小)
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]) {
// 交换
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
// 折半查找函数
int binarySearch(int arr[], int n, int target) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
```
这个程序首先从用户那里输入15个整数,然后使用冒泡排序算法将数组按由大到小排序。接着,程序提示用户输入要查找的数,并使用折半查找算法在排序后的数组中查找该数。如果找到该数,程序会输出它在数组中的位置;如果没有找到,程序会输出"无此数"。
阅读全文