Universidad Nacional de Jujuy PROGRAMACIÓN ESTRUCTURADA Trabajo Práctico Nº 11 Tema: Operaciones sobre Arreglos. Ordenación. Apellido y Nombre: Fecha: / / Conceptos Teóricos ORDENACIÓN DE ARREGLOS Los métodos más usuales de ordenación de arreglos son: Burbuja o Intercambio Selección Inserción Shell Rápido (Quicksort) A continuación se describen los métodos estos métodos. Método de Burbuja o Intercambio El algoritmo de intercambio o burbuja se basa en comparar pares de elementos adyacentes e intercambiarlos entre sí hasta que estén todos ordenados. Por ejemplo, si se considera el siguiente vector Los pasos a dar son: 1. Comparar elemento[1] y elemento[2]; si están en orden, se mantienen como están; en caso contrario, se intercambian entre sí. 2. A continuación se comparan los elementos 2 y 3; de nuevo se intercambian si es necesario. 3. El proceso continúa hasta que cada elemento del vector ha sido comparado con sus adyacentes y se han realizado los intercambios necesarios. En la siguiente tabla se muestra el comportamiento del algoritmo de ordenación burbuja (en cada paso se destacan los valores que se van comparando), la última línea de la tabla presenta los valores del vector ordenados. 2.30 1.44 5.90 3.11 0.32 2.30 1.44 3.11 5.90 0.32 2.30 1.44 3.11 0.32 5.90 1.44 2.30 3.11 0.32 5.90 1.44 2.30 3.11 0.32 5.90 1.44 2.30 0.32 3.11 5.90 1.44 2.30 0.32 3.11 5.90 1.44 2.30 0.32 3.11 5.90 1.44 0.32 2.30 3.11 5.90 1.44 0.32 2.30 3.11 5.90 1.44 0.32 2.30 3.11 5.90 El algoritmo de ordenación burbuja se presenta a continuación (el procedimiento cambio realiza el intercambio de valores entre los parámetros x, y que recibe): procedimiento cambio(e/s x:entero, E/S y:entero) aux:entero aux x x y y aux Año 2012 Pág. 1 de 6
Método de Ordenación por Selección procedimiento burbuja(e/s a:vector,e ocup:entero) j:entero bandera:lógico bandera VERDADERO mientras bandera hacer bandera FALSO para j desde 1 hasta ocup-1 hasta si a[j]>a[j+1] entonces cambio(a[j],a[j+1]) bandera VERDADERO El algoritmo de ordenación por selección se basa en buscar el elemento menor del arreglo y colocarlo en primera posición. Luego se busca el segundo elemento más pequeño y se coloca en la segunda posición, y así sucesivamente. Por ejemplo, si se considera el siguiente vector Los pasos sucesivos a dar son: 1. Seleccionar el elemento menor del arreglo de n elementos. 2. Intercambiar dicho elemento con el primero. 3. Repetir estas operaciones con los n-1 elementos restantes, seleccionando el segundo elemento; continuar con los n-2 elementos restantes hasta que sólo quede el mayor. En la siguiente tabla se muestra el comportamiento del algoritmo de ordenación por selección (en cada paso se destacan los valores que se van comparando), la última línea de la tabla presenta los valores del vector ordenados. 1.44 5.90 2.30 3.11 0.32 1.44 5.90 2.30 3.11 0.32 0.32 5.90 2.30 3.11 1.44 0.32 2.30 5.90 3.11 1.44 0.32 2.30 5.90 3.11 1.44 0.32 1.44 5.90 3.11 2.30 0.32 1.44 3.11 5.90 2.30 0.32 1.44 2.30 5.90 3.11 El algoritmo de ordenación por selección se presenta a continuación (el procedimiento cambio realiza el intercambio de valores entre los parámetros x, y que recibe): Método de Ordenación por Inserción procedimiento seleccion(e/s a:vector,e ocup:entero) i,j:entero para i desde 1 hasta ocup-1 hacer para j desde i+1 hasta ocup hacer si a[i]>a[j] entonces cambio(a[i],a[j]) _para _para El algoritmo de ordenación por inserción ordena un vector insertando cada elemento[i] entre los i-1 Año 2012 Pág. 2 de 6
anteriores que ya están ordenados. Para realizar esto comienza a partir del segundo elemento, suponiendo que el primero ya está ordenado. Si los 2 primeros elementos están desordenados, los intercambia. Luego, toma el tercer elemento y busca su posición correcta con respecto a los dos primeros. En general, para el elemento i, busca su posición con respecto a los i-1 elementos anteriores y de ser necesario lo inserta adecuadamente. vector: En la siguiente tabla se muestra el comportamiento del algoritmo de ordenación por inserción para el i j aux a[j] 2 1 5.90 2.30 3 2 1.44 5.90 5.90 1 2.30 2.30 0 1.44 1.44 2.30 5.90 3.11 0.32 4 3 3.11 5.90 5.90 2 2.30 3.11 1.44 2.30 3.11 5.90 0.32 5 4 0.32 5.90 5.90 3 3.11 3.11 2 2.30 2.30 1 1.44 1.44 0 0.32 El algoritmo de ordenación por inserción se presenta a continuación: Método de Ordenación Shell procedimento insercion(e/s a:vector,e ocup:entero) i,j,aux:entero para i desde 2 hasta ocup hacer aux a[i] j i-1 mientras (j>=1) Y (a[j]>aux) hacer a[j+1] a[j]; j j-1 a[j+1] aux _para El algoritmo de ordenación Shell (o también llamado de inserción con incrementos decrecientes) es una mejora del método de inserción. En este método se realizan comparaciones por saltos constantes (mayores a 1) con lo que se consigue una ordenación más rápida. La ordenación Shell se basa en tomar como salto N/2 (N elementos del arreglo) y luego el salto se va reduciendo a la mitad en cada repetición hasta que vale 1. En la siguiente tabla se muestra el comportamiento del algoritmo de ordenación Shell para el vector: 18 11 27 13 9 4 16 Elemento 6 Elemento 7 Salto i j K Elemento 6 Elemento 7 3 4 1 4 18 11 27 13 9 4 16-2 13 11 27 18 9 4 16 5 2 5 13 11 27 18 9 4 16 Año 2012 Pág. 3 de 6
Salto i j K Elemento 6 Elemento 7-1 13 9 27 18 11 4 16 6 3 6 13 9 27 18 11 4 16 0 13 9 4 18 11 27 16 7 4 7 13 9 4 18 11 27 16 1 4 13 9 4 16 11 27 18 0 13 9 4 16 11 27 18 1 2 1 2 13 9 4 16 11 27 18 0 9 13 4 16 11 27 18 3 2 3 9 13 4 16 11 27 18 1 2 9 4 13 16 11 27 18 0 4 9 13 16 11 27 18 4 3 4 4 9 13 16 11 27 18 0 4 9 13 16 11 27 18 5 4 5 4 9 13 16 11 27 18 3 4 4 9 13 11 16 27 18 0 4 9 11 13 16 27 18 6 5 6 4 9 11 13 16 27 18 0 4 9 11 13 16 27 18 7 6 7 4 9 11 13 16 27 18 5 6 4 9 11 13 16 18 27 0 4 9 11 13 16 18 27 El algoritmo de ordenación Shell se presenta a continuación: Método de Ordenación Rápido (Quicksort) procedimiento shell(e/s a:vector,e ocup:entero) i,j,k,salto:entero salto ocup div 2 mientras salto > 0 hacer para i desde (salto+1) hasta ocup hacer j i-salto mientras j>0 hacer k j+salto si a[j]<=a[k] entonces j 0 sino cambio(a[j],a[k]) j j-salto _para salto salto div 2 El algoritmo de ordenación Rápido permite ordenar una lista basándose en el hecho de que es más fácil ordenar 2 listas pequeñas que una lista grande. El método divide al arreglo en 2 sublistas, una con todos los valores menores o iguales a un cierto valor específico y otra con todos los valores mayores que ese valor. El valor elegido puede ser cualquier valor arbitrario del vector. A este valor se lo denomina pivote. En la siguiente tabla se muestra el comportamiento del algoritmo de ordenación Rápido para el vector: 18 11 27 13 9 4 16 Elemento 6 Elemento 7 Pivote izq der i j Elemento 6 Elemento 7 13 1 7 1 6 18 11 27 13 9 4 16 3 5 4 11 27 13 9 18 16 4 4 4 11 9 13 27 18 16 5 3 11/18 1/5 3/7 1/5 3/7 4 11 9 13 27 18 16 2/6 /6 4 9 11 13 16 18 27 Año 2012 Pág. 4 de 6
Pivote izq der i j Elemento 6 Elemento 7 3/7 2/5 - - - - - 4 9 11 13 16 18 27 El algoritmo de ordenación Rápido se presenta a continuación: Ejercicios a Resolver procedimiento rapido(e/s a:vector,e izq:integer,e der:integer) i,j,pivote:entero i izq j der pivote a[(izq+der) div 2] mientras i<= j hacer mientras a[i]<pivote hacer i i+1; mientras a[j]>pivote hacer j j-1 si i<= j entonces cambio(a[i],a[j]); i i+1; j j-1; si izq < j entonces rapido(a,izq,j) si i < der entonces rapido(a,i,der) 1. Realice la prueba de escritorio del algoritmo de ordenación burbuja para el siguiente vector (utilice la tabla adjunta): 40 15 58 21 17 bandera j j+1 a[j]> a[j+1] 40 15 58 21 17.. 2. Dado los siguientes vectores, muestre gráficamente el comportamiento del algoritmo de ordenación burbuja. 51 12 3 17 35 9 14 37 8 2 18 67 37 61 0 1 4 3 15 22 1 3 10 7 3. Realice la prueba de escritorio del algoritmo de ordenación por selección para el siguiente vector (utilice la tabla adjunta): 21 61 29 10 17 i j a[i]>a[j+1] 21 61 29 10 17 Año 2012 Pág. 5 de 6
4. Dado los siguientes vectores, muestre gráficamente el comportamiento del algoritmo de ordenación por selección. 2 52 49 41 45 4 1 27 46 50 18 14 62 7 26 14 79 1 40 47 4 50 7 2 5. Realice la prueba de escritorio del algoritmo de ordenación por inserción para el siguiente vector (utilice la tabla adjunta): 37 22 13 30 17 I aux j j>=1 Y a[j]>aux 37 22 13 30 17 6. Dado los siguientes vectores, muestre gráficamente el comportamiento del algoritmo de ordenación por inserción. 3 12 10 20 37 9 2 62 63 67 35 31 3 27 43 13 11 5 36 90 46 0 30 60 7. Analice las siguientes secuencias de ordenación y determine a qué algoritmos corresponden: Vector Original 10 46 11 18 1 3 Vector Original 59 85 52 76 5 24 Paso 1 10 46 11 18 1 3 Paso 1 59 52 76 5 24 85 Paso 2 10 11 46 18 1 3 Paso 2 52 59 5 24 76 85 Paso 3 10 11 18 46 1 3 Paso 3 52 5 24 59 76 85 Paso 4 1 10 11 18 46 3 Paso 4 5 24 52 59 76 85 Paso 5 1 3 10 11 18 46 8. Modifique los algoritmos de ordenación Burbuja, Selección e Inserción para que la disposición de elementos se realice en forma decreciente. 9. Implemente el algoritmo de ordenación Burbuja utilizando estructuras REPETIR (para todos los bucles) y el algoritmo de Selección utilizando estructuras MIENTRAS (para todos los bucles). 10. Modifique el algoritmo de Selección de modo que la ordenación se realice a partir de la última posición del arreglo. Año 2012 Pág. 6 de 6