Я пытаюсь найти точку поворота в отсортированном массиве через модифицированный двоичный поиск.Найти точку поворота в отсортированном массиве
Рассмотрим этого массив int values[9]={7, 8, 9, 1, 2, 3, 4, 5, 6};
Точка вращения здесь имеет индекс = 3 т.е. в 9.
Я написал эту функцию для указанных выше операций.
void FindRotationPoint(int values[], int numvalues)
{
int first =0;
int last = numvalues-1;
int middle;
bool moreTosearch= (first<=last);
while(first<=last)
{
middle = (first+last)/2;
if(values[0]>values[middle]) //Keep looking right if the middle value in array is greater than first
{
last = middle-1;
}
if (values[0]<values[middle]) //Keep looking left if the middle value in array is less than first
{
first = middle+1;
}
}
cout<<middle+1<<endl;
cout<<values[middle];
}
Если элементы int values[9]={7, 8, 9, 1, 2, 3, 4, 5, 6};
Выход: 4, 1 (Неправильный)
int values[9]={7, 8, 9, 10, 2, 3, 4, 5, 6};
Выход: 4, 10 (Правильное)
Точка вращения, которая находится на даже место найдено правильно, тогда как в другом случае он находит следующий элемент. Что мне не хватает в приведенном выше коде?
Поскольку moreTosearch всегда просто (кулак <= последний), возможно, вы должны удалить его и положить первый <= последний в то время как состояние. Это сделало бы вещи более компактными и удобными для чтения. – quasiverse
Кроме того, это может не работать, если есть повторяющиеся элементы. – quasiverse
9 находится в индексе 2, а не 3. – ildjarn