Изменения

Перейти к: навигация, поиск

Целочисленный двоичный поиск

741 байт добавлено, 13:26, 14 июля 2015
Применение двоичного поиска на неотсортированных массивах
== Применение двоичного поиска на неотсортированных массивах ==
==='''Применение поиска на циклически сдвинутом отсортированном массиве'''===
Пусть отсортированный по неубыванию возрастанию массив <tex>a[0..n]</tex>, все элементы которого различны, был циклически сдвинут, тогда полученный массив состоит из двух отсортированных частей. Используем двоичный поиск, чтобы найти индекс последнего элемента первой левой части массива. Для этого в реализации двоичного поиска заменим условие в <tex>if</tex> на <tex>a[m] > a[n]</tex>, тогда в <tex>l</tex> будет содержаться искомый индекс:
<code>
'''int''' l = 0
'''int''' x = l <font color="green">// x {{---}} искомый индекс.</font>
</code>
Затем воспользуемся двоичным поиском искомого элемента <tex>key</tex>, запустив его на каждой той части массива, в которой он находится: на <tex>[0, x]</tex> и или на <tex>[x + 1, n]</tex>.Для определения нужной части массива сравним <tex>key</tex> с первым и с последним элементами массива:<code> '''if''' key > a[0] <font color="green">// Если key в левой части...</font> r = x + 1 '''if''' key < a[n] <font color="green">// Если key в правой части...</font> l = x + 1 r = n + 1</code> ==='''Применение поиска на массиве, отсортированном по возрастанию, в конец которого приписан массив, отсортированный по убыванию'''===
== См. также ==
Анонимный участник

Навигация