用c语言实现升序序列由用户输入,应用折半查找方法在一个升序序列中查找值为k的元素。若查找成功,返回元素 k 在序列中的位置,若查找失败,返回失败信息。
时间: 2024-10-20 09:04:20 浏览: 35
在C语言中,我们可以使用折半查找(也叫二分查找)算法来在一个已排序的数组中查找特定的值。以下是步骤和一个简单的函数示例:
首先,确保数组是已经排序好的,例如从最小到最大。然后,编写一个`binary_search`函数,接受两个参数:一个整数数组`arr`、其长度`n`以及目标值`k`。
```c
#include <stdio.h>
int binary_search(int arr[], int n, int k) {
int low = 0;
int high = n - 1;
// 当低索引小于等于高索引时继续循环
while (low <= high) {
int mid = low + (high - low) / 2; // 计算中间索引
// 如果中间元素等于目标值,返回它的索引
if (arr[mid] == k)
return mid;
// 如果中间元素小于目标值,缩小搜索范围到右半部分
else if (arr[mid] < k)
low = mid + 1;
// 否则,搜索左半部分
else
high = mid - 1;
}
// 如果没找到,返回-1表示查找失败
return -1;
}
// 用户输入函数
void input_sequence(int arr[], int size) {
int i;
printf("请输入%d个升序整数:\n", size);
for (i = 0; i < size; ++i) {
scanf("%d", &arr[i]);
}
}
int main() {
int arr[100], size, k, position;
// 获取数组大小
printf("请输入数组的大小:");
scanf("%d", &size);
// 输入有序数组
input_sequence(arr, size);
// 用户输入查找值
printf("请输入你要查找的数值k:");
scanf("%d", &k);
// 查找并打印结果
position = binary_search(arr, size, k);
if (position != -1)
printf("元素 %d 的位置是 %d\n", k, position);
else
printf("查找失败,%d不在序列中.\n", k);
return 0;
}
```
这个程序会首先让用户输入一个升序排列的整数数组和要查找的目标值。然后通过`binary_search`函数寻找该值,并根据返回值判断是查找成功还是失败。
阅读全文