Ordenamiento

7,762 views

Published on

Metodos de ordenacion en c++

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
7,762
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
137
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Ordenamiento

  1. 1. Métodos de OrdenamientoLos métodos de ordenamiento son muy útiles porque nos permiten buscar valores, tanto por valor ypor su posición, de una manera eficiente. Imaginen que tan útil seria un diccionario si las palabrasno estuvieran ordenadas alfabéticamente!Antes de estudiar algunos de los métodos de ordenamiento es necesario definir el problema y elentorno en el cual se desea trabajar. Para realizar un ordenamiento se necesita un conjunto devalores ordenables, es decir, que exista un criterio de ordenamiento, por ejemplo las letras se basanen el alfabeto, los números en la cantidad representada. Además se asume que los valores noestán repetidos [ esto solo para efecto de los ejemplos, ya que la presencia de valores repetidos noaltera el método ]. Además, se trataran solamente métodos de ordenamiento en los que lainstrucción base es la comparación entre dos valores y que se obtiene el ordenamiento por mediode intercambio de valores. Estas consideraciones son la base de los métodos.Son muchos los métodos de ordenamiento, sin embargo, en este curso se hará énfasis en los siguientesmétodos: Ordenamiento por selección, por inserción, burbuja.Para tal efecto asuma las siguientes declaraciones: y las siguientes asignaciones: Type v[ 1 ] := 6; vector = array [ 1 .. 25 ] of integer; v[ 2 ] := 25; Var v[ 3 ] := 7; v : vector; v[ 4 ] := 2; i,j,N,aux,p : integer; v[ 5 ] := 14; N := 5;Ordenamiento por selecciónRef.: Luis Joyanes Aguilar. Programación en Turbo Pascal Ver 5.5, 6.0, 7.0, McGraw-Hill, 2ª.Edición, 1993, pp. 420-422.Este método se basa en la búsqueda del primer mayor / menor, del segundo, del tercero y asísucesivamente hasta agotar la lista de valores a procesar. El algoritmo de ordenación por selecciónde una lista tiene los siguientes pasos: { Ordenamiento por seleccion 1. Encontrar el mayor elemento de la lista en forma descendente } 2. Intercambiar el mayor elemento con el elemento del for i:= 1 to N-1 do subíndice 1 for j:= i+1 to N do 3. A continuación se busca el mayor elemento en la sublista de subíndices de 2 hasta n y se intercambia con if v[ i ] < v[ j ] then el elemento de subíndice 2; por consiguiente, se sitúa begin el segundo elemento mayor en la posición 2 aux := v[ j ]; 4. A continuación se busca el elemento mayor en la v[ j ] := v[ i ]; sublista de 3 hasta n, y así sucesivamente v[ i ] := aux; end;Realizado por: Ing. Katty OrdazComputación II 1/10
  2. 2. Nota:Si desea realizar el ordenamiento de forma ascendente, se sigue el mismo criterio pero en lugar deintercambiar al encontrar un mayor se intercambia al encontrar un menor. Esto se traduce en cambiar lacondición de > a <.El método descrito anteriormente realiza cambios cada vez que encuentra un elemento menor omayor según sea el caso. Esto puede mejorarse al realizar un solo cambio, después de haberdeterminado el mayor / menor elemento y su posición. { Ordenamiento por selección mejorado en forma descendente } for i:= 1 to N-1 do begin A continuación se presenta una corrida en frío del p := i; algoritmo a fin de observar el movimiento de los valores en el arreglo hasta quedar ordenados. Note aux := v[i]; que se intercambia una sola vez por cada iteración. for j:= i+1 to n do Los elementos a reubicarse están indicados con las if v[ j ] > aux then flechas, el elemento resaltado indica la posición del begin índice. p := j; aux := v[ j ]; end; v[ p ] := v[ i ]; v[ i ] := aux; end;Iteración Descripción del proceso Movimiento en el arreglo i 1 Identificado 25 como mayor 6 25 7 2 14 i 2 Identificado 14 como mayor 25 6 7 2 14 i 3 Identificado 7 como mayor 25 14 7 2 6 i 4 Identificado 6 como mayor 25 14 7 2 6 Resultado: vector ordenado 25 14 7 6 2Realizado por: Ing. Katty OrdazComputación II 2/10
  3. 3. Ordenamiento por burbujaRef: Luis Joyanes Aguilar. Programación en Turbo Pascal Ver 5.5, 6.0, 7.0, McGraw-Hill, 2ª.Edición, 1993, pp. 412-417.Este método es clásico y muy sencillo aunque poco eficiente. La ordenación por burbuja [ bubblesort ] se basa en:1. La comparación de elementos adyacentes del vector e2. Intercambio de sus valores si estos están desordenadosDe este modo se dice que los valores más pequeños burbujean hacia la parte superior de la lista[hacia el primer elemento], mientras que los valores más grandes se hunden hacia el fondo de lalista en el caso de un ordenamiento ascendente.La técnica de ordenación de la lista por burbuja compara elementos consecutivos de la lista demodo que si en una pasada no ocurrieran intercambios, significaría que la lista esta ordenada. { Ordenamiento por burbuja mejorado en forma ascendente } desordenado := true; while desordenado do Pasada 1 Pasada 2 Pasada 3 begin desordenado := false; for i:= 1 to n - 1 do 10 5 5 if v[ i ] > v[ I + 1 ] then 5 10 8 8 8 10 begin aux := v[ i ]; v[ i ] := v[ i + 1 ]; v[ i + 1] := aux; desordenado := true; end; end;Realizado por: Ing. Katty OrdazComputación II 3/10
  4. 4. Ordenamiento Parte 2 Ordenamiento con MatricesLas diferentes acciones de ordenamiento sobre elementos de una matriz son:1. Ordenar una fila / columna K de una matriz ( de M filas y N columnas), sin importar la relación entre las columnas / filas de la matriz. En este caso, al realizar el intercambio solamente se mueven los elementos de la fila K. 10 6 1 8 10 6 1 8 10 6 1 8 5 11 3 9 K 5 11 3 9 3 5 9 11 4 2 7 12 4 2 7 12 4 2 7 12 Matriz Original Proceso de Ordenamiento Matriz Modificada Nota: Observe que solamente se ordena la fila K, sin alterar los valores de las columnas correspondientes { Ordenamiento de la fila K de la matriz A de M filas y N columnas Sin importar la relación entre columnas } For i := 1 to N-1 do For j := i + 1 to N do If A[ k, i ] > A[ k, j ] then Begin Aux := A[ k, i ]; A[ k, i ] := A[ k, j ]; A[ k, j ] := Aux; End;Prof. María Beatriz Serrano V. 4/10Computación II
  5. 5. 2. Ordenar una fila / columna K de una matriz ( de M filas y N columnas), manteniendo la relación entre las columnas / filas de la matriz. Para mantener esta relación es necesario intercambiar todos los elementos de la columna. 10 6 1 8 10 6 1 8 1 10 8 6 5 11 3 9 K 5 11 3 9 3 5 9 11 4 2 7 12 4 2 7 12 7 4 12 2 Matriz Original Proceso de Ordenamiento Matriz Modificada Nota: Observe que ordena la fila K, sin embargo para mantener la relación con las columnas correspondientes es necesario intercambiar las columnas completas. { Ordenamiento de la fila K de la matriz A de M filas y N columnas Manteniendo la relación entre columnas } For i := 1 to N-1 do For j := i + 1 to N do If A[ k, i ] > A[ k, j ] then { Intercambio de la columna i con la columna j } For s := 1 to M do Begin Aux := A[ s, i ]; A[ s, i ] := A[ s, j ]; A[ s, j ] := Aux; End;3. Ordenar todos los elementos de una matriz de M filas y N columnas. En este caso no puede ordenarse sobre la misma matriz Matriz Original Proceso Matriz Modificada 10 6 1 8 1 2 3 4 3 5 9 11 5 6 7 8 4 2 7 12 9 10 11 12 10 1 6 PASO 2: 2 1 Ordenar vector 3 8 4 PASO 1: 3 5 Copiar matriz 5 6 PASO 3: en vector 9 7 Copiar vector 11 8 en matriz 4 9 2 10 7 11 12 12Prof. María Beatriz Serrano V. 5/10Computación II
  6. 6. { Ordenamiento de todos los elementos de la matriz A de M filas y N columnas } { Paso 1: Copiar matriz en vector } NV := 0; For i := 1 to M do For j := 1 to N do Begin NV := NV + 1; B[ NV ] := A[ i, j ] End; { Paso 2: Ordenar el vector } For i := 1 to NV-1 do For j := i + 1 to NV do If B[ i ] > B[ j ] then Begin Aux := B[ i ]; B[ i ] := B[ j ]; B[ j ] := Aux; End; { Paso 3: Copiar vector en matriz } NV := 0; For i := 1 to M do For j := 1 to N do Begin NV := NV + 1; A[ i, j ] : = B[ NV ]; End;Prof. María Beatriz Serrano V. 6/10Computación II
  7. 7. Ejercicios de Ordenamiento 1. Dado un arreglo de N elementos, elabore un programa que ordene el arreglo e imprima el arreglo original y el ordenado uno al lado del otro. Desordenado Ordenado 20 10 40 20 90 30 10 40 50 50 80 70 70 80 30 902. Se tiene en un archivo de nombre muestra.dat un conjunto de valores desordenados entre sí y se desea un programa Pascal que determine la mediana de dichos valores. La mediana es el valor tal que ocupa la posición central del vector una vez ordenado; en caso de existir dos elementos centrales, la mediana es el promedio de estos. A= 1 2 3 4 6 8 9 N=7 Mediana = 4 A= 1 2 3 4 6 8 9 12 N=8 Mediana = (4+6)/2=5.03. Elabore un programa Pascal tal que dados los valores enteros de N observaciones a un experimento, determine e imprima la mediana de aquellos valores que terminan en 15 A= 100 115 200 315 215 130 Mediana = 215 A= 105 215 115 120 127 170 Mediana = 165 4. Se tiene en un archivo de datos la información correspondiente a las coordenadas X y Y de los puntos de un juego de tiro al blanco. Elabore un programa que ordene los valores X manteniendo su relación con los valores Y, imprima los puntos y determine la mediana de los valores de X; ¿podría Ud. determinar en estas condiciones la mediana de Y?5. Dada la información correspondiente a las edades de un grupo de personas. Elabore un programa Pascal que determine la mayor edad y que ordene las edades a partir de la posición del mayor. Imprima los dos vectores el original y el modificado. Edad 15 17 16 13 12 10 Edad modificado 15 10 12 13 16 176. Dado un vector A de N elementos, elabore un programa Pascal que calcule la posición del mayor y el menor valor. Si el menor elemento se encuentra antes del mayor elemento, ordene el vector ascendentemente a partir de la posición del menor hasta la posición del mayor; si el menor elemento se encuentra después del mayor valor, ordene descendentemente a partir de la posición del mayor valor hasta la posición del menor valor. Vector Original A= -1 4 10 2 4 -2 9 Vector Ordenado A= -1 4 10 4 2 -2 9Prof. Manuel R. Fernández R. 7/10Computación II
  8. 8. 7. El empecinado Sr. Fasti, quiere desarrollar un programa para ordenar ascendentemente el vector V de M elementos, que esta en paralelo con el vector W, de atrás hacia adelante; es decir comenzando de las posiciones finales (M) hacia el principio. Pero este ordenamiento solo debe realizarse para la porción comprendida entre las posiciones K y L del vector [ K < L ] y debe mantener la relación con su vector paralelo. Desarrolle el Diagrama de Flujo de un programa que realice esa tarea. A continuación se presenta un ejemplo: V W V W 2 20 2 20 4 40 4 40 K 9 -90 9 -90 1 -10 8 80 5 50 5 50 L 8 80 1 -10 7 70 7 70 3 30 3 30 ANTES DESPUÉS8. Una entidad bancaria se encarga de cancelar las pensiones a los jubilados de una empresa. El pago se realiza en función de la centena de la cédula de identidad del pensionado, de la siguiente forma: 1 y 6: Lunes 2 y 7: Martes 3 y 8: Miércoles 4 y 9: Jueves 5 y 0: Viernes Elabore un programa Pascal que dado un grupo de datos con la siguiente información: Nombre, Cédula y Monto de la Pensión imprima un listado por día donde se muestre: Día: XXXXXXXX Número de Pensionados: XXX ----- Nombre ------- -- Cédula - - Monto – XXXXXXXXXXXXXXX XXXXXXXX XXXXXXX : : : XXXXXXXXXXXXXXX XXXXXXXX XXXXXXX ----------- Total: XXXXXXX El listado deberá contener los encabezados adecuados y no más de 40 personas por página ni más de un día de la semana por página.9. Dada una matriz de orden N, elabore un programa que ordene la fila donde se encuentra el menor elemento, sin importar la relación entre las columnas.10. Dada una matriz de orden N, elabore un programa que ordene la columna donde se encuentra el mayor elemento, sin importar la relación entre las columnas.11. Dada una matriz de orden N, elabore un programa que ordene la fila donde se encuentra el menor elemento, manteniendo la relación entre las columnas.12. Dada una matriz de orden N, elabore un programa que ordene la columna donde se encuentra el mayor elemento, manteniendo la relación entre las columnas.13. Dada una matriz de orden N, elabore un programa que ordene los elementos ubicados en la diagonal principal14. Dada una matriz de M filas y N columnas, elabore un programa que ordene los elementos de cada fila a partir de la posición del menor elemento.15. Dada una matriz de M filas y N columnas, elabore un programa que ordene los elementos de cada columna a partir de la posición del elemento de la diagonal secundaria.Prof. Manuel R. Fernández R. 8/10Computación II
  9. 9. 16. Dada la información de los estudiantes de Computación: Cédula de identidad, nombre, y N (N > 8) quices, elabore un programa con subprogramas que determine el promedio de los 8 mejores quices para cada estudiante.17. Dada la información de los estudiantes de Computación: Cédula de identidad, nombre, sección y N (N > 8) quices, elabore un programa con subprogramas que ordene la información por sección y dentro de cada sección por nombre18. Dada la información de los estudiantes de la Facultad: Nombre y Fecha de Nacimiento (dia, mes, año) elabore un programa con subprogramas que ordene por fecha de nacimiento y al final determine quien es el nombre del estudiante con mayor edad.19. a) Elabore una Función que permita ubicar el elemento menor de un vector A de N componentes a partir de la posición K. b) Elabore un Procedimiento que permita intercambiar dos elementos de un vector. c) Elabore un Procedimiento que permita intercambiar dos filas K y L de una matriz d) Elabore un Programa PASCAL que permita leer los datos de M estudiantes (Cédula y las notas de los tres parciales), las cédulas en un vector y las notas en una matriz. Ordene la información en forma creciente según el promedio de notas de los parciales haciendo uso exclusivamente de los 3 subprogramas anteriores. Imprimir la información ya ordenada.20. a) Desarrolle un subprograma PASCAL que lea una matriz R de LxK elementos. b) Desarrolle un subprograma PASCAL que imprima una matriz Q de KxL elementos. c) Dada una matriz H de MxN elementos, un vector fila Q de N elementos y un valor K (1 ≤ K ≤ M+1), elabore un subprograma en PASCAL que modifique la matriz de la siguiente forma: Si 1 ≤ K ≤ M, inserte el vector en la fila K Si K=M+1, anexe el vector colocándolo como última fila de la matriz d) Dada una matriz A de orden PxQ y tres valores enteros K, L y M, elabore un subprograma PASCAL que ordene la fila K a partir de la columna L hasta la columna M de la matriz. e) Dada una matriz Z de orden K, elabore un subprograma PASCAL que usando el subprograma anterior, ordene cada fila a partir del elemento ubicado en la diagonal secundaria.  0 −1 2 − 6  0 −1 2 − 6      8 1 − 3 − 1  8 1 − 1 − 3 Z = ⇒Z =  10 8 3 4  10 3 4 8      0 3 −4 1 − 4 0 1 3 f) Dada una matriz C de orden K, elabore una función en PASCAL que calcule la suma de los elementos de la triangular inferior. g) Dada una matriz C de orden K, elabore una función en PASCAL que calcule la suma de los elementos de la triangular superior. h) Dada una matriz AB de orden M, elabore un programa PASCAL que lea la matriz y si la suma de los elementos de la triangular inferior son iguales a la suma de los elementos de la triangular superior, ordene las filas de la matriz a partir de los elementos de la diagonal secundaria, sino, inserte un vector de elementos nulos en la primera fila de la matriz.Prof. Manuel R. Fernández R. 9/10Computación II
  10. 10. 21. a) Desarrolle un subprograma PASCAL tipo función que dada una matriz A de MxN y un valor escalar K, determine el menor valor de la fila K.  11 5 9    A = 13 20 15  Para K = 2, el menor valor es 13 1 8 7   b) Desarrolle un subprograma que dada una matriz A de LxP, genere un vector Z donde cada elemento sea igual a la suma de los elementos de cada fila mayores al valor mínimo. Debe usar el subprograma anterior.  11 5 9   20      A = 13 20 15  Z =  35  1 8 7  15      c) Desarrolle un subprograma tipo procedimiento que dada una matriz A de LxP elementos y un vector Z de L componentes, ordene el vector en forma descendente, manteniendo la relación con las componentes de las filas de la matriz.  11 5 9   20  13 20 15   35          A = 13 20 15  Z =  35  ⇒ A =  11 5 9  Z =  20  1 8 7  15  1 8 7  15          d) Desarrolle un programa Pascal que haciendo uso de los subprogramas anteriores y los que Ud. considere necesarios, haga lo siguiente: i) Lea el contenido de una matriz C de NxM, donde N representa el número de vendedores den una empresa y M la cantidad de diferentes artículos que vende la tienda; el contenido [I,J] de la matriz corresponderá a la cantidad vendida del artículo J por el vendedor I. M y N son conocidos y son valores de entrada. ii) Calcule el promedio de ventas de cada vendedor, el cual será igual a: Suma de Ventas - Venta Menor M -1 iii) Ordene el vector en forma descendente, manteniendo la relación con las componentes de las filas. iv) Imprimir la matriz y el vector promedio uno al lado del otro.Prof. Manuel R. Fernández R. 10/10Computación II

×