Правильно ли я говорю, что в обоих алгоритмах все, что вы делаете, - это берете свою структуру, рекурсивно разделяете ее на две и затем выстраиваете структуру в правильном порядке?
Итак, в чем разница?
Изменить: я нашел следующий алгоритм для реализации раздела в быстрой сортировке, но я действительно не понимаю, как он работает, в частности, строку swop, которая использует (hi + low) >>> 1
как аргумент! Может ли кто-нибудь понять это?
private static int partition( int[] items, int lo, int hi )
{
int destination = lo;
swop( items, (hi + lo) >>> 1, hi );
// The pivot is now stored in items[ hi ].
for (int index = lo; index != hi; index ++)
{
if (items[ hi ] >= items[ index ])
{
// Move current item to start.
swop( items, destination, index );
destination ++;
}
// items[ i ] <= items[ hi ] if lo <= i < destination.
// items[ i ] > items[ hi ] if destination <= i <= index.
}
// items[ i ] <= items[ hi ] if lo <= i < destination.
// items[ i ] > items[ hi ] if destination <= i < hi.
swop( items, destination, hi );
// items[ i ] <= items[ destination ] if lo <= i <= destination.
// items[ i ] > items[ destination ] if destination < i <= hi.
return destination;
}