为什么我的二进制搜索总是 return -1
Why does my binary search always return -1
我对递归函数很陌生,正在尝试在结构数组中搜索 id,为什么它总是 return -1 而不是 3?
这是结构体
struct Student{
int id;
};
struct Student student[4];
我的二分查找功能
int binary(int start, int end, int search){
if(end >= start){
int mid = (start + (end - start)) / 2;
if(student[mid].id == search){
return mid;
}
if(search > student[mid].id){
return binary(mid+1, end, search);
}
else{
return binary(1, mid-1, search);
}
}
else{
return -1;
}
主要功能
int main(){
student[0].id = 1004;
student[1].id = 1003;
student[2].id = 1002;
student[3].id = 1001;
int position = binary(0, 3, 1001);
printf("The search value 1001 is at index number %d", position);
}
```
因为要对元素进行升序排序,而不是降序排列,所以应该是:
student[0].id = 1001;
student[1].id = 1002;
student[2].id = 1003;
student[3].id = 1004;
或者你必须在二元函数上用 >
更改 <
,例如
int binary(int start, int end, int search){
if(end >= start){
int mid = (start + end) / 2;
if(student[mid].id == search){
return mid;
}
if(search < student[mid].id){
return binary(start, mid-1, search);
}
else{
return binary( mid+1, end, search);
}
}
else{
return -1;
}
}
递归调用的索引也是错误的
我对递归函数很陌生,正在尝试在结构数组中搜索 id,为什么它总是 return -1 而不是 3?
这是结构体
struct Student{
int id;
};
struct Student student[4];
我的二分查找功能
int binary(int start, int end, int search){
if(end >= start){
int mid = (start + (end - start)) / 2;
if(student[mid].id == search){
return mid;
}
if(search > student[mid].id){
return binary(mid+1, end, search);
}
else{
return binary(1, mid-1, search);
}
}
else{
return -1;
}
主要功能
int main(){
student[0].id = 1004;
student[1].id = 1003;
student[2].id = 1002;
student[3].id = 1001;
int position = binary(0, 3, 1001);
printf("The search value 1001 is at index number %d", position);
}
```
因为要对元素进行升序排序,而不是降序排列,所以应该是:
student[0].id = 1001;
student[1].id = 1002;
student[2].id = 1003;
student[3].id = 1004;
或者你必须在二元函数上用 >
更改 <
,例如
int binary(int start, int end, int search){
if(end >= start){
int mid = (start + end) / 2;
if(student[mid].id == search){
return mid;
}
if(search < student[mid].id){
return binary(start, mid-1, search);
}
else{
return binary( mid+1, end, search);
}
}
else{
return -1;
}
}
递归调用的索引也是错误的