Так что я пытаюсь сделать двоичный алгоритм сортировки для моего класса C++, но я продолжаю получать ошибку сегментации, когда запускается моя функция binarySearch. Независимо от того, как сильно я и мой сосед по комнате смотрят на это, мы не можем найти проблему. Любая помощь будет принята с благодарностью.Бинарный поиск в C++: по возрастанию + по убыванию упорядоченные массивы
int binarySearch(int arr[], int k, int first, int last)
{
if(arr[first] <= arr[last])
{
int mid = (first + last)/2;
if(k == arr[mid])
{
return mid;
}
else if (k < arr[mid])
{
return binarySearch(arr, k, first, mid-1);
}
else return binarySearch(arr, k, mid+1, last);
}
else if(arr[first] >= arr[last])
{
int mid = (first + last)/2;
if(k == arr[mid])
{
return mid;
}
else if (k < arr[mid])
{
return binarySearch(arr, k, mid+1, last);
}
else return binarySearch(arr, k, first, mid-1);
}
else return -1;
}
После фиксации ошибки сегментации, я заметил, что я должен иметь ошибку где-то в моей логике, так как программа поддерживает вывод о том, что ключ не удалось найти, даже если она существует в массиве.
Посмотрите на http://mycodinglab.com/binary-search-algorithm-c/ и сравните с тем, что вы сделали. –
Да, на самом деле. Я все еще закончил с несколькими логическими ошибками, но я думаю, что это больше проблема ха-ха. –