Понимание алгоритма QuickSelect

Я внимательно изучил различные руководства и статьи, в которых обсуждается быстрая сортировка и быстрый выбор, однако мое понимание их все еще шатко.

Учитывая эту структуру кода, мне нужно понять и объяснить, как работает quickselect.

// return the kth smallest item
int quickSelect(int items[], int first, int last, int k) {
    int pivot = partition(items, first, last);
    if (k < pivot-first) {
        return quickSelect(items, first, pivot, k);
    } else if (k > pivot) {
        return quickSelect(items, pivot+1, last, k-pivot);
    } else {
        return items[k];
    }
}

Мне нужна небольшая помощь с разбивкой на псевдокод, и, хотя мне не предоставили код функции разбиения, я хотел бы понять, что она будет делать с предоставленной функцией быстрого выбора.

Я знаю, как работает быстрая сортировка, но не быстрый выбор. Код, который я только что предоставил, является примером того, как форматировать быстрый выбор.

РЕДАКТИРОВАТЬ: исправлен код

int quickSelect(int items[], int first, int last, int k) 
{
    int pivot = partition(items, first, last);
    if (k < pivot-first+1) 
    { //boundary was wrong
        return quickSelect(items, first, pivot, k);
    } 
    else if (k > pivot-first+1) 
    {//boundary was wrong
        return quickSelect(items, pivot+1, last, k-pivot);
    }
    else 
    {
        return items[pivot];//index was wrong
    }
}

Любезность: @Haitao

28
задан Mike Samuel 4 November 2015 в 19:38
поделиться