El documento explica el algoritmo quicksort para ordenar un arreglo de números de manera recursiva. Quicksort funciona seleccionando un elemento del arreglo como pivote y reorganizando los elementos menores que el pivote a su izquierda y los mayores a su derecha. Luego aplica el mismo proceso de manera recursiva a los subarreglos izquierdo y derecho hasta ordenar completamente el arreglo original.
3. QUICKSORT
1 2 3 4 5 6 7 8 9
44 75 23 43 55 12 64 77 33
Declaramos el primer elemento del arreglo como primero
Y al ultimo como ultimo.
1 2 3 4 5 6 7 8 9
44 75 23 43 55 12 64 77 33
Primero Ultimo
4. QUICKSORT
1 2 3 4 5 6 7 8 9
44 75 23 43 55 12 64 77 33
Ultimo
Primero
Pivote
Declaramos el primero como el pivote del arreglo.
5. QUICKSORT
1 2 3 4 5 6 7 8 9
Pivote
44 75 23 43 55 12 64 77 33
44
Ultimo
Primero
Up Down
Colocamos a Up como Primero y Down como Ultimo.
6. QUICKSORT
1 2 3 4 5 6 7 8 9
44 75 23 43 55 12 64 77 33
Pivote
44
Ultimo
Primero
Up Up Down
Muevo Up al primer valor mayor que el pivote
Despues movemos Down al primer valor de derecha a izquierda
menor que el pivote (en este caso Down no se mueve).
7. QUICKSORT
1 2 3 4 5 6 7 8 9
44 75 23 43 55 12 64 77 33
Pivote
44
Ultimo
Primero
Up Down
Ahora intercambiamos los valores de Up y Down
1 2 3 4 5 6 7 8 9
44 33 23 43 55 12 64 77 75
8. QUICKSORT
1 2 3 4 5 6 7 8 9
44 33 23 43 55 12 64 77 75
Pivote
44
Primero Ultimo
Up Down
Desde la posicion en que se encuentra movemos Up a un valor mayor
que el pivote. 1 2 3 4 5 6 7 8 9
44 33 23 43 55 12 64 77 75
Primero Ultimo
Up Down
9. QUICKSORT
1 2 3 4 5 6 7 8 9
Pivote
44 44 33 23 43 55 12 64 77 75
Primero
Down Ultimo
Up Down
Cambiamos Down a la posicion menor que el pivote recorriendo de
Derecha a Izquierda
10. QUICKSORT
1 2 3 4 5 6 7 8 9
Pivote
44 44 33 23 43 55 12 64 77 75
Primero
Down Ultimo
Up Down
Intercambiamos los valores de Up y Down…
1 2 3 4 5 6 7 8 9
44 33 23 43 12 55 64 77 75
11. QUICKSORT
1 2 3 4 5 6 7 8 9
44 33 23 43 12 55 64 77 75
Pivote
44
Primero Up Down Ultimo
Movemos Up desde la posicion en que se encuetra a la primera
posicion mayor que el pivote y Down a la primera posicion de
derecha a Izquierda menor que el pivote.
1 2 3 4 5 6 7 8 9
44 33 23 43 12 55 64 77 75
Primero Up Down Ultimo
12. QUICKSORT
Como Up y Down se cruzaron, entonces debemos
intercambiar el valor de Down por el pivote.
1 2 3 4 5 6 7 8 9
Pivote
44
12 33 23 43 44 55 64 77 75
Primero Down Ultimo
PivIndex
Ahora notemos que todos los valores debajo de PivIndex son
menores que el y los que estan por encima son mayores que el.
13. QUICKSORT
Esto nos da ahora dos nuevos subarreglos que hay que ordenar
1 2 3 4 5 6 7 8 9
12 33 23 43 44 55 64 77 75
Primero 1 Ultimo 1 Primero 2 Ultimo 2
PivIndex
Se debe repetir el proceso hasta que los subarreglos estén
ordenados, lo cual nos dará como resultado el arreglo
ordenado.
14. QUICKSORT
El algoritmo del método de ordenamiento estará formado
por tres procesos:
• QuickSort, proceso que inicia el ordenamiento.
• Encuentra Pivote, busca el mejor pivote a partir
del primer elemento del vector
• Partición, va comparando por ambos extremos e
intercambia en caso de ser necesario
16. QUICKSORT
1. Inicio quicksort( i , j : enteras)
2. indice-pivoteencuentra-pivote( i , j)
3. Si indice-pivote < > 0 entonces
3.1 pivote A[indice-pivote].data
3.2 kparticion( i , j , pivote)
3.3 quicksort( i , k – 1)
3.4 quicksort(k , j )
4. Fin quicksort
17. QUICKSORT
1. Inicio encuentra-pivote( i , j : enteras)
2. primera-claveA[i].data
3. Para k i +1 hasta j hacer
3.1 Si a[k].data > primera-clave entonces
returna k
de lo contrario,
Si A[k].data > primera-clave entonces
returna i
4. returna 0
5. Fin
18. QUICKSORT
1. Inicio partición( i , j : enteras, pivote:tipo-clave) : entero
2. z i;
3. dj;
4. Repetir
intercambiar(A[z],A[d])
Mientras A[z].data < pivote hacer
zz+1
Mientras A[d].data >= pivote hacer
d d + 1
hasta
z>d
4. returna z
5. Fin