我正在尝试制作二进制搜索的分而治之版本,但是将数组划分为两个子数组并进行搜索类似于合并排序中的合并,我想这样做的原因是我想在 cilk 中使用它,但是我必须这样做。这是我编写的代码,它似乎有问题,因为它返回 -1 到有效的键值。
#include <stdio.h>
#include "BinarySearch.h"
int main () {
int a[] = {0,1,2,3,4,5,6,7,8,9};
int index = binarySearch(a, 0, 9, 7);
printf("%i", index);
return 0;
}
int binarySearch (int* A, int first, int last, int key) {
if (last < first)
return -1;
else {
int mid = (last + first) / 2;
if (A[mid] == key)
return mid;
int x, y;
x = binarySearch(A, first, mid - 1, key);
y = binarySearch(A, mid + 1, last, key);
if (x == -1 && y == -1)
return -1;
else if (x == -1 && y != -1)
return y;
else
return x;
}
}