В чем разница между алгоритмом быстрой сортировки и алгоритмом быстрого выбора? - PullRequest
1 голос
/ 06 июля 2019

Помимо поиска только одной стороны массива, есть ли различия между быстрой сортировкой и быстрым выбором?

1 Ответ

1 голос
/ 09 июля 2019

Одно отличие состоит в том, что поскольку на каждом уровне выполняется поиск только одного раздела, то вместо рекурсии можно использовать итерацию. Пример кода с использованием схемы разбиения Lomuto. В зависимости от шаблона данных может помочь более точный выбор (вместо [hi]).

int QuickSelect(int a[], int sz, int k)
{
    int lo = 0;
    int hi = sz-1;              // (no check for empty array)
    while (lo < hi){
        int p = a[hi];          // Lomuto partition
        int i = lo;
        for (int j = lo; j < hi; ++j){
            if (a[j] < p){
                std::swap(a[j], a[i]);
                ++i;
            }
        }
        std::swap(a[i], a[hi]);
        if (k == i)             // if pivot == kth element, return it
            return a[k];
        if (k < i)              // loop on partition with kth element
            hi = i - 1;
        else
            lo = i + 1;
    }
    return a[k];                // sorted to kth elemement, return it
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...