Я должен реализовать алгоритм, который возвращает медиану массива. Поэтому я решил реализовать Quickselect, который кажется эффективным для этого, и я увидел, что для трипартии я могу использовать тот же алгоритм разбиения, который используется в Quicksort.Раздел в Quickselect
Алгоритм раздела сообщил в моих конспектах (в коде C) заключается в следующем:
for (i = lo, j = hi;
(i <= j);)
{
while (a[i] < pivot)
{
i++;
}
while (a[j] > pivot)
{
j--;
}
if (i <= j)
{
if (i < j)
{
/* exchange values */
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
i++;
j--;
}
}
Теперь, если мой массив: а = [40, 20, 100, 60, 80] и я выбираю в качестве поворота число 80, результат: a = [40, 20, , 60, 100], но поскольку вы можете видеть, что значения в правом разделе не все> 80 (у нас есть 60) , Если я выберу любое другое число, алгоритм работает правильно.
Неправильно ли этот алгоритм?
Благодарим за помощь!
об основных алгоритма быстрой сортировки двойного раздела вы спроектировали понять, вам не хватает в «..or равно» случай в одном из двух контуров развертки. [См. Здесь] (https://www.cs.auckland.ac.nz/software/AlgAnim/qsort1a.html). Общий алгоритм выбора можно увидеть на вики, то есть я верю, что вы действительно после. – WhozCraig