编写程序,将一数组中的数按从小到大排序,然后输入一个数,要求用折半查找法找出该数,是数组中第几个元素值。如果该数不在数组中,则打印出“无此数”用c语言
时间: 2024-12-19 14:21:38 浏览: 9
有15个数折半查找法.md
在C语言中,你可以编写如下的程序来实现这个功能:
```c
#include <stdio.h>
#include <stdlib.h>
// 二分查找函数
int binary_search(int arr[], int low, int high, int target) {
if (high >= low) {
int mid = low + (high - low) / 2;
// 如果中间元素等于目标,返回它的索引
if (arr[mid] == target)
return mid;
// 如果中间元素大于目标,搜索左半部分
else if (arr[mid] > target)
return binary_search(arr, low, mid - 1, target);
// 否则搜索右半部分
else
return binary_search(arr, mid + 1, high, target);
}
// 如果目标不存在于数组中,返回-1
return -1;
}
void sort_and_search(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 num;
printf("请输入一个整数:");
scanf("%d", &num);
int index = binary_search(arr, 0, n - 1, num);
if (index != -1)
printf("数 %d 的位置是第 %d 个。\n", num, index + 1);
else
printf("无此数。\n");
}
int main() {
int size;
printf("请输入数组的长度:");
scanf("%d", &size);
int* array = malloc(size * sizeof(int)); // 动态分配内存
printf("请输入数组的元素:\n");
for (int i = 0; i < size; i++) {
scanf("%d", &array[i]);
}
sort_and_search(array, size);
free(array); // 释放动态分配的内存
return 0;
}
```
阅读全文