EJEMPLO DE QUICKSORT

Anuncio
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
Pivote
44
2
3
4
5
6
7
8
9
44 75 23 43 55 12 64 77 33
Primero
Up
Ultimo
Down
Colocamos a Up como Primero y Down como Ultimo.
1
Pivote
44
2
3
4
5
6
7
8
9
44 75 23 43 55 12 64 77 33
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).
1
Pivote
44
2
3
4
5
6
7
8
9
44 75 23 43 55 12 64 77 33
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
1
Pivote
44
2
3
4
5
6
7
8
9
44 33 23 43 55 12 64 77 75
Ultimo
Primero
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
Ultimo
Primero
Up
Down
Pivote
44
1
2
3
4
5
6
7
8
9
44 33 23 43 55 12 64 77 75
Primero
Up
Down
Ultimo
Down
Cambiamos Down a la posicion menor que el pivote recorriendo de
Derecha a Izquierda
Pivote
44
1
2
3
4
5
6
7
8
9
44 33 23 43 55 12 64 77 75
Primero
Up
Down
Ultimo
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
Pivote
44
2
3
4
5
6
7
8
9
44 33 23 43 12 55 64 77 75
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
44
1
2
3
4
5
6
7
8
9
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
PivIndex
Ultimo 2
Se debe repetir el proceso hasta que los subarreglos estén
ordenados, lo cual nos dará como resultado el arreglo
ordenado.
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
1. Inicio quicksort( i , j : enteras)
2. indice-pivoteencuentra-pivote( i , j)
3. Si indice-pivote < > 0 entonces
3.1 pivote  A[indice-pivote].data
3.2 kparticion( 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-claveA[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 partición( i , j : enteras, pivote:tipo-clave) : entero
2. z i;
3. dj;
4. Repetir
intercambiar(A[z],A[d])
Mientras A[z].data < pivote hacer
zz+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]
Descargar