Código:
entero = funcion Partition(entero array[], entero inicio, entero final)
entero j, k, pivot
pivot = array[inicio]
j = pivot - 1
k = final + 1
Hacer //mientras true
hacer
j += 1
Repetir mientras (array[j] < pivot)
Hacer
k -= 1
Repetir mientras (array[k] > pivot)
Si (j < k)
swap(array, j, k) // <--- nota*
sino
devolver k
Fin si
Repetir
fin funcion
*nota: que yo paso el array y los índices, cámbialo al gusto...
Con este código, se debe cambiar ligeramente la función quicksort. En la línea
Código:
quickSort(array, inicio, piv - 1);
Es posible subsumir ambas funciones (Partition y Quicksort) en una sola, lo que lo hace más óptimo... la de 'swap' también ya que utiliza muy pocas líneas y se invoca desde un único sitio...
p.d.: Perdón el pseudocódigo es para un orden ascendente, no había caído en ese detalle. Mañana saco un tiempito para modificarlo (o mejor adjuntar otro pseudocódigo). ...aunque puedes intentar modificarlo tú mismo