Прав ли я, говоря, что в обоих алгоритмах все, что вы делаете - это берете свою структуру, рекурсивно разбиваете ее на две части, а затем строите свою структуру в правильном порядке?
Так в чем же разница?
Edit: я нашел следующий алгоритм для реализации раздела в быстрой сортировке, но я не совсем понимаю, как он работает, в частности, строка 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;
}