У меня проблемы с пониманием алгоритма быстрого выбора. Я знаю, что он основан на алгоритме быстрой сортировки (с которым я знаком) и что он дает требуемый результат, возможно, оставляя часть массива несортированной. И вот здесь у меня возникли трудности. Вопрос в том, чтобы найти второй наименьший элемент из массива:
int a[4] = {1,3,5,2} ;
Теперь предположим, что мы выбираем опорную точку случайным образом, тогда в соответствии с этим сообщением у нас есть следующие условия:
k == pivot
. Тогда вы уже нашли k-е наименьшее. Это потому, что раздел работает. Ровно k - 1 элементов меньше, чем k-й элемент.k < pivot
. Тогда k-й наименьший находится слева от оси поворота.k > pivot
. Тогда k-й наименьший находится справа от оси поворота. И чтобы его найти, вам нужно найти справа наименьшее число k-pivot.
Я был бы признателен, если бы кто-нибудь мог объяснить, как k==pivot
означает, что мы нашли k-й (в моем случае 2-й наименьший элемент). Также, если это k < pivot
, повторить процесс для левой стороны поворота?