Что лучше?Упорядоченный двоичный поиск с сборкой | Рекурсивный против итеративного против библиотеки
Согласно Savich, каждая рекурсия сохраняется в стеке в виде кадра активации. Это накладные расходы. Однако для записи рекурсивной версии требуется несколько строк кода. Для интервью, которое лучше включить. Код для обоих приведен ниже.
#include <iostream>
using namespace std;
const int SIZE = 10;
int array[ SIZE ] = { 0,1,2,3,4,5,6,7,8,9 };
int answer = NULL;
void binary_search_recursive(int array[], int start, int end, int value, int& answer)
{
int mid = (start + end)/2;
if (array[ mid ] == value)
{
answer = mid;
}
else if (array[ mid ] < value)
{
binary_search_recursive(array, mid + 1, end, value, answer);
}
else
{
binary_search_recursive(array, start, mid - 1, value, answer);
}
}
void binary_search_iterative(int array[], int start, int end, int value, int& answer)
{
int mid = ((start + end)/2);
while(array[ mid ] != value )
{
if (array[ mid ] < value)
{
start = mid;
mid = (((mid + 1) + end)/2);
}
else
{
end = mid;
mid = ((start + (mid - 1))/2);
}
}
answer = mid;
}
int main()
{
binary_search_iterative(array, 0, SIZE - 1, 4, answer);
cout << answer;
return 0;
}
Я считаю, что лучше подходит для [codereview.SE] (HTTP: //codereview.stackexchange .com /), хотя и не идеально. – amit
Что происходит с вашим кодом при поиске элемента, не входящего в массив? Я думаю, что вам может не хватать другого условия выхода. – tinman