Нахождение индекса максимального значения в циклически отсортированном массиве - PullRequest
1 голос
/ 29 апреля 2019

Мне нужно написать функцию, которая возвращает индекс максимального значения в циклически отсортированном массиве, без дубликатов в O (logn).

Я уже пробовал этот код, и он работает, но дляПо какой-то причине я получаю сообщение об ошибке, когда массив содержит 2 или 6 элементов.Я не совсем понимаю, что с ним не так, что он работает для любой длины массива, кроме этих двух значений.

int arr[];
int search;
int index=sizeof(arr)/sizeof(*arr) - 1;
int min=0;
int max=sizeof(arr)/sizeof(*arr) - 1;
int mid;
int m=index;
while (min!=max) {
    mid=(min+max)/2;
    if (arr[m] < arr[mid]) {
        min=mid+1;
        index=mid;
        max=max;
    }
    else if (arr[m] > arr[mid]) {
        max=mid-1;
        min=min;
    }
    else {
        index=m;
    }
    if (min==max)
        break;
}
cout << index;

Примеры:

Ввод: 1 2 3 4 5

Выход: 4

Вход: 3 4 5 1 2

Выход: 2

Вход: 9 1 2 3

Выход: 0

Ввод: 1 2 или 1 2 3 4 5 6

Выход: ОШИБКА

Я также включил cout<<min<<max<<mid в то время, чтобы проверить, что происходит, когда длина равна 2или 6, и я получаю бесконечный цикл с 0-10 выходами.Буду признателен за любую помощь.Заранее спасибо!

...