Buenas, estoy intentando implementar QuickSort para ordenar un vector cualquiera, pero estoy teniendo problemas.
La función ordena correctamente, pero una vez el vector está ordenado mi función recursiva sigue ejecutandose en un bucle infinito, y no logro encontrar el error.
El código del QuickSort es el siguiente:
int splitArray(vector<int>&v, int l, int r)
{
int pivot = r;
int leftInd = l;
while(leftInd < pivot)
{
if(v[leftInd] > v[pivot])
{
swap(v, leftInd, pivot-1);
swap(v, pivot-1, pivot);
if(pivot>0) --pivot;
}
else ++leftInd;
}
return pivot;
}
void quickSort(vector<int>& v, int l, int r)
{
if(r > l)
{
int pivot = splitArray(v, l, r);
quickSort(v, l, pivot);
quickSort(v, pivot+1, r);
}
}
NOTA: las variables "l" y "r" significan "left" y "right". La función swap() es trivial, intercambia las dos variables que se le pasan por parametros (el primer parámetro es el vector, y los dos siguientes las posiciones de los valores a intercambiar).
Es muy probable que la implementación tampoco sea la más eficiente, ya que intenté entender un código de quicksort ya hecho y no lograba verlo, por lo que decidí implementarlo yo por mi cuenta. Acepto críticas y consejos
Muchas gracias.
Solucionado:
void quickSort(vector<int>& v, int l, int r)
{
if(r > l)
{
int pivot = splitArray(v, l, r);
quickSort(v, l, pivot-1); //AQUÍ EL ERROR, NO LE RESTABA 1 A PIVOT
quickSort(v, pivot+1, r);
}
}
Saludos