二进制搜索递归无法正常运行
Binary Search Recursion Not Functioning Correctly
我编写了一个简单的二进制搜索代码来打印出搜索内容的位置。
当搜索到的元素不在数组中时,它会正确识别并打印出 "error"。
但是,当搜索到的元素实际上在数组中时,打印的是值,而不是位置。你能告诉我我错过了什么吗?
提前致谢
#include <stdio.h>
#include <stdlib.h>
int binarysearch(int array[], int low, int max, int search);
int main(void) {
int array[10]={10,11,12,13,14,15,16,17,18,19};
int count,search;
count=sizeof(array)/sizeof(array[0]);
printf("Enter the number you would like to search\n");
scanf("%d",&search);
int result=binarysearch(array,0,count,search);
if (result>0){
printf("Element in position %d",result);
}
else{
printf("Error");
}
}
int binarysearch(int array[], int low, int max, int search){
if(low<=max){
int middle=(low+max)/2;
if(search>array[middle]){
low=middle+1;
return binarysearch(array,low,max,search);
}
else if(search<array[middle]){
max=middle-1;
return binarysearch(array,low,max,search);
}
else {
return search;
}
}
else
return -1;
}
除了 return middle;
(代替 return search
)更改之外,您还应该更改
if (result>=0){
^^^^
printf("Element in position %d",result);
}
否则即使找到了也总是漏掉第0个元素。 (小姐我的意思是结果不会被打印出来)。二进制搜索将按预期工作。
另一件需要注意的事情是在计算 mid
以避免溢出时使用这个
int middle = low + ((max - low) / 2);
最后,使用递归纯属浪费
int binarysearch(int array[], int low, int max, int search) {
while (low <= max) {
int middle = low + ((max - low) / 2);
if (search > array[middle]) {
low = middle + 1;
}
else if (search < array[middle]) {
max = middle - 1;
}
else {
return middle;
}
}
return -1;
}
我编写了一个简单的二进制搜索代码来打印出搜索内容的位置。 当搜索到的元素不在数组中时,它会正确识别并打印出 "error"。 但是,当搜索到的元素实际上在数组中时,打印的是值,而不是位置。你能告诉我我错过了什么吗? 提前致谢
#include <stdio.h>
#include <stdlib.h>
int binarysearch(int array[], int low, int max, int search);
int main(void) {
int array[10]={10,11,12,13,14,15,16,17,18,19};
int count,search;
count=sizeof(array)/sizeof(array[0]);
printf("Enter the number you would like to search\n");
scanf("%d",&search);
int result=binarysearch(array,0,count,search);
if (result>0){
printf("Element in position %d",result);
}
else{
printf("Error");
}
}
int binarysearch(int array[], int low, int max, int search){
if(low<=max){
int middle=(low+max)/2;
if(search>array[middle]){
low=middle+1;
return binarysearch(array,low,max,search);
}
else if(search<array[middle]){
max=middle-1;
return binarysearch(array,low,max,search);
}
else {
return search;
}
}
else
return -1;
}
除了 return middle;
(代替 return search
)更改之外,您还应该更改
if (result>=0){
^^^^
printf("Element in position %d",result);
}
否则即使找到了也总是漏掉第0个元素。 (小姐我的意思是结果不会被打印出来)。二进制搜索将按预期工作。
另一件需要注意的事情是在计算 mid
以避免溢出时使用这个
int middle = low + ((max - low) / 2);
最后,使用递归纯属浪费
int binarysearch(int array[], int low, int max, int search) {
while (low <= max) {
int middle = low + ((max - low) / 2);
if (search > array[middle]) {
low = middle + 1;
}
else if (search < array[middle]) {
max = middle - 1;
}
else {
return middle;
}
}
return -1;
}