【发布时间】:2017-03-28 18:03:24
【问题描述】:
第一次在这里发帖。我最近实现了二分搜索,但有时我的输出会返回一个巨大的负数。现在我的第一个想法是我正在打印一个数字,我的指针指向一个随机内存位置。有人可以帮助我了解逻辑以及如何改进我的代码吗?
#include <stdio.h>
#include <stdlib.h>
int binarysearch(int *array, int size, int target);
int main() {
int array[] = { 1, 2, 3, 4, 5, 6 };
printf("%d\n", binarysearch(array, 8, 15));
return 0;
}
int binarysearch(int *array, int size, int target) {
int mid;
mid = size / 2;
if (size < 1) {
return -1;
}
if (size == 1) {
return array[0];
}
if (target == array[mid]) {
return target;
} else
if (target < array[mid]) {
binarysearch(array, mid, target);
} else{
binarysearch(array + mid, size - mid, target);
}
}
【问题讨论】:
-
为什么要这样调用函数 binarysearch(array, 8, 15));当数组只有 6 个元素时?
-
你不能(不应该——不能有意义地)返回
array[0]仅仅因为数组中有一个元素;它可能不等于您正在寻找的值。您需要返回递归调用找到的值;当调用代码使用未返回的值时,您会调用未定义的行为。 -
@JonathanLeffler 他可以,但他不应该那样做。:)
-
@VladfromMoscow:是的——公平评论;通过修订解决。
-
另一种方法是使用
bsearch