В чем разница между быстрой сортировкой и сортировкой слиянием?

Правильно ли я говорю, что в обоих алгоритмах все, что вы делаете, - это берете свою структуру, рекурсивно разделяете ее на две и затем выстраиваете структуру в правильном порядке?

Итак, в чем разница?

Изменить: я нашел следующий алгоритм для реализации раздела в быстрой сортировке, но я действительно не понимаю, как он работает, в частности, строку 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;
}
5
задан razlebe 19 April 2011 в 10:34
поделиться