请帮我用C语言写这道题的代码:给定一个有序正整数数组和一个要查找的目标数。要求给出要查找目标数在给定数组中第一次(或最后一次)出现的索引号(数组下标),没有查找到时输出-1。
时间: 2023-06-06 21:07:15 浏览: 88
c语言-leetcode题解之0088-merge-sorted-array.zip
好的,以下是用 C 语言写的代码:
```c
#include <stdio.h>
int binary_search(int arr[], int n, int target, int first) {
int left = 0, right = n - 1, res = -1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
res = mid;
if (first)
right = mid - 1;
else
left = mid + 1;
} else if (arr[mid] < target)
left = mid + 1;
else
right = mid - 1;
}
return res;
}
int main() {
int n, target;
printf("请输入数组的长度:");
scanf("%d", &n);
int arr[n];
printf("请输入有序数组:");
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
printf("请输入要查找的目标数:");
scanf("%d", &target);
int first_index = binary_search(arr, n, target, 1);
int last_index = binary_search(arr, n, target, 0);
if (first_index == -1)
printf("%d\n", -1);
else if (first_index == last_index)
printf("%d\n", first_index);
else
printf("第一次出现的索引号:%d\n最后一次出现的索引号:%d\n", first_index, last_index);
return 0;
}
```
代码功能介绍:该代码实现了二分查找算法,可以在有序数组中查找目标数第一次出现的索引号和最后一次出现的索引号,如果没有查找到目标数则输出 -1。其中,binary_search 函数用于实现二分查找,first 参数表示是否查找第一次出现的索引号,res 变量记录目标数第一次(或最后一次)出现的索引号,-1 表示未找到目标数。在 main 函数中,用户需要输入数组的长度、有序数组和要查找的目标数,并调用 binary_search 函数查找目标数第一次和最后一次出现的索引号,最后根据查找结果进行输出。
阅读全文