Hola Foxternoster, hay distintas variantes del algoritmo quicksort. Quizás la más clásica es la que se basa en dado un vector como (3, 1, 9, 2, 6, 12, 5) tomar el primer elemento del vector como pivote. Ese primer elemento se deja "aparcado" hasta el instante final del proceso.
Ahora se comienza a recorrer los elementos desde el principio hacia el final (i=2 hasta i=n) hasta encontrar uno mayor que el pivote. Una vez terminado esto, en este caso nos encontraremos sobre el número 9 (i=3), y pasamos a recorrer los elementos desde el final hacia el principio (j=7 hasta j=1) hasta encontrar uno menor que el pivote. En nuestro caso el mismo 5 es mayor que el pivote, por lo que nos detenemos en j=7. Ahora intercambiamos los números en que nos hemos detenido, es decir, el vector queda:
(3, 1, 5, 2, 6, 12, 9)
¿Qué estamos haciendo? Lo más grande que el pivote lo vamos "echando" hacia la derecha y lo más pequeño hacia la izquierda. El pivote lo dejamos aparte de momento.
Ahora seguimos el recorrido desde los índices en que nos habíamos quedado, es decir, seguimos con i=3+1, i=4 y comprobamos si es más grande que el pivote, no lo es, pasamos al siguiente, y ahora con i=5 número 6 este sí es más grande que el pivote. Paramos aquí y nos pasamos al recorrido de las jotas. Chequeamos j=6 para ver si es menor que el pivote, pero no lo es. Seguimos j=5, j=4. En j=4 nos encontramos al 2, que sí es menor que el pivote. Ahora tenemos que tener en cuenta que se produce la circunstancia i > j ¿Qué significa esto? Que los dos índices se han cruzado y el elemento mayor ya está a la derecha del elemento menor, por tanto no tiene sentido realizar intercambio entre ellos. ¿Qué nos falta por hacer? Sabemos que a la derecha del índice j todos los números son mayores que el pivote. Lo que hacemos ahora es poner el pivote en la posición que nos indica j, con lo cual ya tenemos todos los números mayores a un lado y todos los números menores a otro.
(2, 1, 5, 3, 6, 12, 9)
Con esto ya tenemos el vector dividido: el pivote está en su posición definitiva, no tendremos que tocarlo más.
Hay un subvector izquierdo que es (2, 1, 5) y otro subvector derecho que es (6, 12, 9)
Esto es básicamente el mecanismo de quicksort. La idea es aplicarlo recursivamente cierto número de veces hasta tener vectores de tamaño pequeño y en ese momento proceder a la ordenación por otro método más directo como el de ordenación por inserción.