二分查找,必须有序 已知一有序数组 a[] = {50, 51, 52, 53, 54, 55, 56, 57, 58, 59},输入一个数n,如果数组中有,则输出是第几个,如果没有则输出0 样例:输入:54 输出: 5 输入:59 输出:10 输入60: 输出:0(C语言)
时间: 2023-08-18 17:09:58 浏览: 130
以下是C语言实现的二分查找代码:
```c
#include <stdio.h>
int binarySearch(int arr[], int len, int target) {
int left = 0, right = len - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid + 1; // 返回第几个数,加1是因为数组下标从0开始
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return 0; // 没有找到返回0
}
int main() {
int arr[] = {50, 51, 52, 53, 54, 55, 56, 57, 58, 59};
int len = sizeof(arr) / sizeof(int);
int target;
printf("请输入一个数:");
scanf("%d", &target);
int index = binarySearch(arr, len, target);
if (index == 0) {
printf("没有找到\n");
} else {
printf("第%d个数\n", index);
}
return 0;
}
```
我们定义了一个 `binarySearch` 函数来进行二分查找,其中 `arr` 为有序数组,`len` 为数组长度,`target` 为要查找的目标数。在函数中,我们使用 `left` 和 `right` 两个指针来表示二分查找的区间,初始时区间为整个数组。然后在循环中,我们计算出中间位置 `mid`,并判断 `arr[mid]` 是否等于 `target`,如果是则直接返回 `mid+1`(注意加1),表示找到了目标数的位置;如果 `arr[mid] < target`,则说明目标数在区间的右边,将左指针 `left` 移动到 `mid+1` 的位置;否则,说明目标数在区间的左边,将右指针 `right` 移动到 `mid-1` 的位置。如果循环结束后仍然没有找到目标数,则返回0,表示没有找到。
在 `main` 函数中,我们定义了一个有序数组 `arr`,并计算出其长度。然后通过 `scanf` 函数输入要查找的目标数 `target`,再调用 `binarySearch` 函数进行查找。如果返回值为0,则说明没有找到,否则输出找到的位置。
阅读全文