He estado estudiando detenidamente varios tutoriales y artículos que tratan de quicksort y quickselect, sin embargo mi comprensión de ellos todavía es inestable.Algoritmo QuickSelect Comprensión
Dada esta estructura de código, necesito ser capaz de captar y explicar cómo funciona 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];
}
}
Necesito un poco de ayuda con que se dividen en pseudo-código, y mientras no se me ha proporcionado con el código de función de partición, me gustaría entender lo que haría dada la función Quickselect proporcionado.
Sé cómo funciona quicksort, simplemente no quickselect. El código que acabo de proporcionar es un ejemplo que se nos dio sobre cómo formatear la selección rápida.
EDIT: El código corregido es
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
puedo ser demasiado específico con mis necesidades - Una comprensión general de Quickselect es lo que ayudaría más, el código que proporcionó es un ejemplo de eso. – Edge
Esa información de MIT está en la clasificación, no en la selección. Por lo que puedo ver. – Edge
¿Por qué los necesitamos ?: pivot-first + 1 y k-pivot –