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-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 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 Si un arreglo esta dado por: x = [25 57 48 37 12 92 86 33]