Declaremos un arreglo de 9 posiciones con
numeros aleatorios...
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
1 2 3 4 5 6 7 8 9
44 75 23 43 55 12 64 77 33
Primero Ultimo
Pivote
Declaramos el primero como el pivote del arreglo.
1 2 3 4 5 6 7 8 9
Pivote
44 44 75 23 43 55 12 64 77 33
Primero Ultimo
Up Down
Colocamos a Up como Primero y Down como Ultimo.
1 2 3 4 5 6 7 8 9
Pivote 44 75 23 43 55 12 64 77 33
44
Primero Ultimo
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).
1 2 3 4 5 6 7 8 9
Pivote 44 75 23 43 55 12 64 77 33
44
Primero Ultimo
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
1 2 3 4 5 6 7 8 9
Pivote 44 33 23 43 55 12 64 77 75
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
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
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
1 2 3 4 5 6 7 8 9
Pivote 44 33 23 43 12 55 64 77 75
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
Como Up y Down se cruzaron, entonces debemos
intercambiar el valor de Down por el pivote.
Pivote 1 2 3 4 5 6 7 8 9
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.
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 estn
ordenados, lo cual nos dar como resultado el arreglo
ordenado.
El algoritmo del mtodo 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
Particin, va comparando por ambos extremos e
intercambia en caso de ser necesario
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
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
1. Inicio particin( 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
Si un arreglo esta dado por:
x = [25 57 48 37 12 92 86 33]