用C语言编写,将一数组中的数按从小到大排序然后输入一个数要求用折半查找法找出该数是数组中第几个元素的值如果数不对不存在元素中如打印出无此数
时间: 2023-05-29 20:07:51 浏览: 70
以下是用C语言编写的程序,实现了将一数组中的数按从小到大排序,然后输入一个数要求用折半查找法找出该数是数组中第几个元素的值,如果数不对不存在元素中则打印出无此数。
```c
#include <stdio.h>
// 折半查找函数
int binary_search(int arr[], int len, int key) {
int low = 0;
int high = len - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid] == key) {
return mid; // 找到了,返回下标
} else if (arr[mid] < key) {
low = mid + 1; // key在右边,缩小查找范围
} else {
high = mid - 1; // key在左边,缩小查找范围
}
}
return -1; // 没有找到,返回-1
}
int main() {
int arr[] = {5, 2, 8, 3, 1, 7, 4, 6};
int len = sizeof(arr) / sizeof(arr[0]);
// 冒泡排序
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
// 输出排序后的数组
printf("排序后的数组:");
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// 输入要查找的数
int key;
printf("请输入要查找的数:");
scanf("%d", &key);
// 折半查找
int index = binary_search(arr, len, key);
if (index == -1) {
printf("无此数\n");
} else {
printf("%d 是数组中第 %d 个元素\n", key, index + 1);
}
return 0;
}
```
程序运行示例:
```
排序后的数组:1 2 3 4 5 6 7 8
请输入要查找的数:3
3 是数组中第 3 个元素
```