Quick Sort

Post on 12-May-2015

10.768 views 2 download

Transcript of Quick Sort

Quicksort

QUICKSORTDeclaremos un arreglo de 9 posiciones con numeros aleatorios...

QUICKSORT

44 75 23 43 55 12 64 77 33

1 2 3 4 5 6 7 8 9

Declaramos el primer elemento del arreglo como primeroY al ultimo como ultimo.

44 75 23 43 55 12 64 77 33

1 2 3 4 5 6 7 8 9

Primero Ultimo

QUICKSORT

44 75 23 43 55 12 64 77 33

1 2 3 4 5 6 7 8 9

Primero Ultimo

Pivote

Declaramos el primero como el pivote del arreglo.

QUICKSORT

44 75 23 43 55 12 64 77 33

1 2 3 4 5 6 7 8 9

Primero Ultimo

Up

Pivote 44

Down

Colocamos a Up como Primero y Down como Ultimo.

QUICKSORT

44 75 23 43 55 12 64 77 33

1 2 3 4 5 6 7 8 9

Primero Ultimo

Up Down

Muevo Up al primer valor mayor que el pivote

Up

Despues movemos Down al primer valor de derecha a izquierdamenor que el pivote (en este caso Down no se mueve).

Pivote 44

QUICKSORT

44 75 23 43 55 12 64 77 33

1 2 3 4 5 6 7 8 9

Primero Ultimo

DownUp

Pivote 44

Ahora intercambiamos los valores de Up y Down

44 33 23 43 55 12 64 77 75

1 2 3 4 5 6 7 8 9

QUICKSORT

44 33 23 43 55 12 64 77 75

1 2 3 4 5 6 7 8 9

PrimeroDownUp

Pivote 44

Ultimo

Desde la posicion en que se encuentra movemos Up a un valor mayorque el pivote.

44 33 23 43 55 12 64 77 75

1 2 3 4 5 6 7 8 9

PrimeroDownUp

Ultimo

QUICKSORT

44 33 23 43 55 12 64 77 75

1 2 3 4 5 6 7 8 9

PrimeroUp UltimoDown

Cambiamos Down a la posicion menor que el pivote recorriendo deDerecha a Izquierda

Down

Pivote 44

QUICKSORT

44 33 23 43 55 12 64 77 75

1 2 3 4 5 6 7 8 9

PrimeroUp UltimoDown

Down

Pivote 44

Intercambiamos los valores de Up y Down…

44 33 23 43 12 55 64 77 75

1 2 3 4 5 6 7 8 9

QUICKSORT

44 33 23 43 12 55 64 77 75

1 2 3 4 5 6 7 8 9

Primero Up UltimoDown

Pivote 44

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.

44 33 23 43 12 55 64 77 75

1 2 3 4 5 6 7 8 9

Primero Up Down Ultimo

QUICKSORT

Como Up y Down se cruzaron, entonces debemos intercambiar el valor de Down por el pivote.

12 33 23 43 44 55 64 77 75

1 2 3 4 5 6 7 8 9

Primero Down Ultimo

Pivote 44

PivIndex

Ahora notemos que todos los valores debajo de PivIndex son menores que el y los que estan por encima son mayores que el.

QUICKSORT

12 33 23 43 44 55 64 77 75

1 2 3 4 5 6 7 8 9

Primero 1 Ultimo 1

PivIndex

Esto nos da ahora dos nuevos subarreglos que hay que ordenar

Ultimo 2Primero 2

Se debe repetir el proceso hasta que los subarreglos estén ordenados, lo cual nos dará como resultado el arreglo ordenado.

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

QUIKSORT

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].data3.2 kparticion( i , j , pivote)3.3 quicksort( i , k – 1)3.4 quicksort(k , j )

4. Fin quicksort

QUICKSORT

1. Inicio encuentra-pivote( i , j : enteras)2. primera-claveA[i].data3. Para k i +1 hasta j hacer

3.1 Si a[k].data > primera-clave entoncesreturna k

de lo contrario,Si A[k].data > primera-clave entoncesreturna i

4. returna 05. Fin

QUICKSORT1. Inicio partición( i , j : enteras, pivote:tipo-clave) : entero2. z i;3. dj;4. Repetir

intercambiar(A[z],A[d])Mientras A[z].data < pivote hacer

z z + 1Mientras A[d].data >= pivote hacer

d d + 1hasta z > d

4. returna z5. Fin