二分查找,升序数组,有1000000个数,查找,如果存在多个就输出编号最小的,不存在就输出None,C语言求,用函数写
时间: 2024-03-05 17:51:18 浏览: 40
好的,这里给出一个 C 语言的函数实现,可以实现您的需求:
```c
int binary_search(int arr[], int len, int target) {
int left = 0, right = len - 1;
int result = -1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == target) {
result = mid;
right = mid - 1;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return result;
}
int main() {
// 示例数组
int arr[1000000];
for (int i = 0; i < 1000000; i++) {
arr[i] = i + 1;
}
// 要查找的目标值
int target = 999999;
// 进行二分查找
int result = binary_search(arr, 1000000, target);
// 输出结果
if (result == -1) {
printf("None\n");
} else {
printf("%d\n", result);
}
return 0;
}
```
在这个 C 语言代码中,我们定义了一个名为 `binary_search` 的函数,它接收三个参数:一个升序数组 `arr`、数组的长度 `len` 和要查找的目标值 `target`。函数内部使用典型的二分查找算法来查找目标值所在的位置,并返回其下标。如果发现目标值在数组中存在多个,我们只保留编号最小的一个。
在 `main` 函数中,我们使用一个示例数组来进行测试,查找值为 `999999` 的元素所在的位置,并输出结果。如果找到了,我们将输出其下标,否则将输出 `None`。
这段代码可能需要一些时间才能运行完毕,因为数组的长度为 1000000,需要进行较长时间的二分查找。
阅读全文