【发布时间】:2025-12-21 06:30:12
【问题描述】:
下面是对有序数组中的元素进行二分查找的代码:
#include<stdio.h>
int binarySearch(int *arr, int l, int r, int data)
{
if(l > r)
return -1;
int mid = l+(r-l)/2; //find the middle index
if(data < arr[mid]) {
return(binarySearch(arr, l, mid-1, data));
}
else if(data > arr[mid]) {
return(binarySearch(arr, mid+1, r, data));
}
else {
return mid;
}
}
int main()
{
int arr [] = {0 , 11, 22, 33, 44, 55, 66 };
int n = sizeof(arr)/sizeof(arr[0]);
int data = 22;
int index = binarySearch(arr, 0, n-1, data);
if( index != -1)
{
printf("%d" , index);
}
return 0;
}
如何使搜索稳定?当数组的元素重复时,我的搜索应该返回数组中数据第一次出现的索引。
我希望我修改后的代码作为输出产生:
input array is {1, 22, 22, 22}
output = 1,
input array is {1, 12, 15, 22, 22, 22, 22, 22, 22, 22, 55 ,66}
output = 3
我不知道该怎么做。
【问题讨论】:
-
您的示例无法编译(
data未在main()中定义)并且它不应该编译的#include <stdio.h>(对于printf)。 -
{1, 12, **25**, 22, 22, ..未排序
标签: c++ c algorithm data-structures