Metodos de ordenamiento

4,875 views

Published on

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

No Downloads
Views
Total views
4,875
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
140
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Metodos de ordenamiento

  1. 1. INSTITUCIÓN UNIVERSITARIA DE ENVIGADOFACULTAD DE INGENIERÍAS – LÓGICA DE PROGRAMACIÓNMÉTODOS DE ORDENACIÓNSe dividen en dos categorías:Ordenación INTERNA de vectores y matrices (tablas): se denomina ordenación interna, ya que sealmacena en la memoria interna de la computadora de gran velocidad y acceso aleatorio.Ordenación EXTERNA de archivos: La ordenación de archivos se suele hacer con casi siempresobre soportes de almacenamiento externo, discos, cinta, etc. y por ello se denomina tambiénordenación externa. Estos dispositivos son más lentos en las operaciones de entrada/salida, pero,por el contrario, pueden contener mayor cantidad de informaciónORDENACIÓN DE VECTORES O ARREGLOS:Los métodos más conocidos son:1. Ordenación por Intercambio o de burbuja.2. Ordenación por Inserción directa.3. Ordenación por Inserción Binaria.4. Ordenación por Selección Directa.5. Ordenación por el método de Shell6. Ordenación por el método Quicksort (ordenamiento rápido)La organización de los datos en un vector puede ser en orden ascendente (los valores van demenor a mayor) o descendente (los valores van de mayor a menor)1. Burbuja. El algoritmo ordena los elementos del arreglo utilizando el método de laburbuja, esto es, transporta en cada pasada el elemento mayor hacia la partederecha del arreglo.Ejemplo: Se tiene un vector de 100 elementos, organizarlo de forma ascendente.Lista de variablesVEC = nombre del arregloN = Registro identificadori, J= subíndices del vectorAUX = variable auxiliar para ordenar el vectorINICIO BURBUJAInicioConst Int N = 100;Int VEC[N], num;Int i;
  2. 2. Llamar Llenar_VEC (VEC [N], i);Llamar a Ordenar (VEC [N], i);Fin// Sólo haremos el subprograma Ordenar:Ordenar (Int VEC [N]; Int i)InicioInt j, aux;Para ( i = 1, (n-1))j = i + 1Para (J = ( i + 1); N)Si (VEC[ i ] > VEC[ j ]) Ent//Intercambio:aux = VEC [i];VEC [i] = VEC[j];VEC[j] = aux;Fin-siFin-ParaFin-ParaFin2. Ordenamiento Por Inserción directa: En este método una vez que se determina laposición correcta del elemento, se interrumpen las comparaciones.Ejemplo Ordenar un vector de 100 posiciones con elementos numéricos enteros.Lista de variablesVEC = nombre del arregloN = Registro identificadork, m= subíndices del vectorAUX = variable auxiliar para ordenar el vectorINSERCION_DIRECTA ()InicioConst Int N = 100;Int VEC[N], num;Int k;Llamar Llenar_VEC (VEC [N], k);Llamar a Ordenar (VEC [N], k);Fin// Sólo haremos el subprograma Ordenar:Ordenar (Int VEC [N]; Int k)InicioInt m, aux;PARA (k = 2, N)aux = VEC[m]
  3. 3. k = m - 1MQ ( (k >=1) && (aux < VEC[k]) ) HAGAVEC [k+1] = VEC[k]k = k - 1Fin-MQVEC [k+1] = aux;Fin-ParaFIN Ordenar3. Ordenamiento Por Inserción Binaria: El método de ordenación por insercióndirecta puede mejorarse fácilmente. Para ello se recurre a una búsqueda binariaen lugar de una búsqueda secuencial para insertar un elemento en la parteizquierda del arreglo, que ya se encuentra ordenado. El proceso, al igual que enmétodo de inserción directa, se repite desde el segundo hasta el n-ésimoelemento.Ejemplo Ordenar un vector de 100 posiciones con elementos numéricos enterosLista de variablesVEC = nombre del arregloN = Registro identificadorx, y= subíndices del vectorAUX = variable auxiliar para ordenar el vectorIZQ = izquierda del vectorDER = derecha del vectorM = variable para almacenar la mitadINSERCION_BINARIA ()InicioConst Int N = 100;Int VEC[N], num;Int x;Llamar Llenar_VEC (VEC [N], x);Llamar a Ordenar (VEC [N], x);Fin// Sólo haremos el subprograma Ordenar:Ordenar (Int VEC [N]; Int x)InicioInt AUX , IZQ, DER , M, y;Para (y = 2, N)AUX = VEC [y];IZQ = 1DER = y - 1MQ (IZQ <= DER)M = ((IZQ + DER)/2)
  4. 4. SI (AUX < = VEC [M]) EntDER = M - 1SINOIZQ = M + 1FIN-SIFin-MQx = y - 1MQ (x >= IZQ) HAGAVEC [x + 1] = VEC [x]x = x - 1Fin-MQVEC [IZQ] = AUXFin-PARAFin-OrdenarNOTA: en el método de ordenación por inserción binaria se efectúa el menor número decomparaciones cuando el arreglo está totalmente desordenado y el máximo cuando estáordenado.4. Ordenamiento Por Selección Directa: El método de ordenación por seleccióndirecta es más eficiente que los métodos analizados anteriormente, pero sólo paravectores pequeños.La idea básica de este algoritmo consiste en buscar el menor elemento del arreglo y colocarlo en laprimera posición. Luego se busca el segundo elemento más pequeño del arreglo y se lo coloca enla segunda posición.El método se basa en los siguientes principios:Seleccionar el menor elemento del arregloIntercambiar dicho elemento con el primeroRepetir los pasos anteriores con los (n-1), (n-2) elementos y así sucesivamente hastaque sólo quede el elemento mayor.Ejemplo Ordenar un vector de 100 posiciones con elementos numéricos enterosLista de variablesVEC = nombre del arregloN = Registro identificadorj, p= subíndices del vectorMENOR = variable auxiliar para ordenar el vectorK = izquierda del vectorORDENASELECCIONDIRECTA ()Inicio
  5. 5. Const Int N = 100;Int VEC[N], num;Int j;Llamar Llenar_VEC (VEC [N], j);Llamar a Ordenar (VEC [N], j);Fin// Sólo haremos el subprograma Ordenar:Ordenar (Int VEC [N]; Int j)InicioInt j, MENOR, K, P;PARA (P = 1, N -1)MENOR = VEC [P]K = PPARA (j = P + 1, N)SI VEC [j] < MENOR) EntMENOR = VEC [j]K = jFin-siFin-ParaVEC [K] = VEC [P]VEC [P] = MENORFin-paraFin5. Ordenamiento Por El Método De Shell. Es una mejora del método de insercióndirecta que se utiliza cuando el número de elementos a ordenar es grande. Elmétodo se denomina “Shell” -en honor a su inventor Donal Shell- y tambiénmétodo de inserción sin incrementos decrecientes.Shell modificó los saltos contiguos resultantes de las comparaciones por saltos de mayor tamaño ycon eso se conseguía la clasificación más rápida. El método se basa en fijar el tamaño de los saltosconstantes, pero de más de una posición.Supongamos un vector A de seis (6) elementos.4 12 16 24 36 3En el método de inserción, los saltos se hacen de una posición y se necesitarán 5 comparaciones.En el método de Shell, si los saltos son de dos posiciones, se realiza tres comparaciones.El método se basa en tomar como salto N/2 (siendo N el número de elementos) y luego se vareduciendo a la mitad en cada repetición hasta que el salto o distancia vale 1
  6. 6. Para un vector A de N elementos, el primer salto a dar tendrá un valor de N/2, por lo que, pararedondear, se tomará la parte entera de N div 2Y se iguala a SALTOSalto = N div 2El seudocódigo del procedimiento de ordenamiento por el método Shell es el siguiente:Ejemplo Ordenar los elementos del arreglo utilizando el método de Shell. VEC es un arreglo de 100elementosLista de variablesVEC = nombre del arregloN = Registro identificadorJ,K,F = subíndices del vectorSALTO = variable auxiliar para ordenar el vectorORDENAMIENTO_SHELL ()InicioConst Int N = 100;Int VEC[N], num;Int j;Llamar Llenar_VEC (VEC [N], j);Llamar a Ordenar (VEC [N], j);Fin// Sólo haremos el subprograma Ordenar:Ordenar (Int VEC [N]; Int j)InicioInt SALTO, K, F;SALTO = N div 2MQ (SALTO > 0) HAGAPARA (F = (SALTO + 1), N)J = F - SALTOMq (J > 0)K = J + SALTOSI (VEC [J] <= VEC [K]) EntJ = 0SINOAUX = VEC [j]VEC [j] = VEC [k]VEC [k] = AUXFin-siJ = J - SALTOFin-MQ
  7. 7. Fin-ParaSALTO = SALTO div 2Fin-MQFin OrdenarTALLER DE ORDENAMIENTO:1. Almacenar 50 números en un vector, ordenarlos en forma ascendente y mostrar siexiste o no un número leído desde teclado.2. Almacenar en vectores paralelos de 50 posiciones, los nombres y cédulas de losestudiantes de un grupo. Permitir realizar consultas por el número de cédula ymostrar los vectores ordenados en forma descendente.3. Almacenar en vectores paralelos el código y precio de N artículos, máximo 100.Permitir consultas por código y por precio. Mostrarlos ordenados en formaascendente por el campo código.4. Almacenar en vectores paralelos de 100 posiciones los datos de N estudiantes:código y promedio académico. Permitir consultar por código del estudiante.Mostrar los vectores ordenados por el campo código y/o promedio de acuerdo a laelección del usuario.5. Almacenar en vectores paralelos (igual tamaño) la edad y el sexo de 100 personas.Imprimir el promedio de edad de los hombres y promedio de edad de las mujeres.Mostrar el contenido de ambos vectores en forma ordenada por el campo edad.

×