Ho esaminato vari tutorial e articoli che discutono di quicksort e quickselect, tuttavia la mia comprensione di essi è ancora traballante.QuickSelect Algorithm Understanding
Data questa struttura di codice, ho bisogno di essere in grado di cogliere e spiegare come funziona 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];
}
}
Ho bisogno di un piccolo aiuto con ripartita per circa il pseudo-codice, e mentre io non sono stato fornito con il codice funzione di partizione, mi piacerebbe capire cosa avrebbe fatto data la funzione quickselect fornito.
So come funziona quicksort, ma non solo quickselect. Il codice che ho appena fornito è un esempio che ci è stato dato su come formattare la selezione rapida.
EDIT: Il codice corretto è
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
}
}
courtesty: @Haitao
posso essere troppo specifico con le mie esigenze - una comprensione generale del quickselect è quello che avrebbe aiutato la maggior parte, il codice che ho fornito ne è un esempio – Edge
Queste informazioni dal MIT sono in ordine, non in selezione. Per quanto posso vedere. – Edge
Perché abbiamo bisogno di questi: pivot-first + 1 e k-pivot –