#include
search(int arr,int left,int right,int find){
int midnum=(left+right)/2;
int zeronum=arr[midnum];
if(left>right){
return -1;
}
if(findsearch(arr,left,midnum-1,find);
} else if(find>zeronum){
search(arr, midnum+1,right,find);
}else{
return midnum;
}
}
int main() {
int arr[] = {1, 3, 5, 6, 7, 8, 9, 10, 1000, 100000};
int num = search(arr, 0, 9, 10);
if (num == -1) {
printf("没有找到");
} else {
printf("找到了,位置在%d", num);
}
getchar();
}
传的第一个参数为数组应该使用指针而不是int arr(变量),把int arr改成int* arr即可
#include<stdio.h>
int search(int* arr,int left,int right,int find){ // 传的第一个参数为数组应该使用指针而不是int arr(变量)
int midnum=(left+right)/2;
int zeronum=arr[midnum];
if(left>right){
return -1;
}
if(find<zeronum){
search(arr,left,midnum-1,find);
} else if(find>zeronum){
search(arr, midnum+1,right,find);
}else{
return midnum;
}
}
int main() {
int arr[] = {1, 3, 5, 6, 7, 8, 9, 10, 1000, 100000};
int num = search(arr, 0, 9, 10);
if (num == -1) {
printf("没有找到");
} else {
printf("找到了,位置在%d", num);
}
getchar();
}
题主用的是二分查找,哪里报错了,题主可以贴出来。
题主可以查查二分查找相关的写法,不过单从直观来看,题主这问题不大。
我写的也有类似解法的文章,题主可以参考。
https://yueliusu.blog.csdn.net/article/details/126670329?spm=1001.2014.3001.5502