Я пытаюсь сделать разницу и победить версию двоичного поиска, но тот, который делит массив на два подмассива и поиск, похожий на слияние в сортировке слияния, причина, по которой я хочу это сделать потому что я хочу использовать его в cilk, но я должен сделать это именно так. Вот код, который я написал, который, похоже, имеет что-то не так с его возвратом -1 к действительным значениям ключа.Разделить и бинарный поиск в C
#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;
}
}
Итак, следующий шаг - использовать отладчик (или множество операторов печати) для отслеживания потока вашей программы, чтобы определить, где его поведение отличается от ожидаемого. –
Когда вы всегда ищете обе половины, он не делит и не побеждает, вы просматриваете весь массив, если ключ отсутствует. –
Покажите нам свои точные тестовые примеры? –