1. INSTITUCIÓN UNIVERSITARIA DE ENVIGADO
FACULTAD DE INGENIERÍAS – LÓGICA DE PROGRAMACIÓN
MÉTODOS DE ORDENACIÓN
Se dividen en dos categorías:
Ordenación INTERNA de vectores y matrices (tablas): se denomina ordenación interna, ya que se
almacena 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 siempre
sobre soportes de almacenamiento externo, discos, cinta, etc. y por ello se denomina también
ordenación externa. Estos dispositivos son más lentos en las operaciones de entrada/salida, pero,
por el contrario, pueden contener mayor cantidad de información
ORDENACIÓ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 Shell
6. 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 de
menor 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 la
burbuja, esto es, transporta en cada pasada el elemento mayor hacia la parte
derecha del arreglo.
Ejemplo: Se tiene un vector de 100 elementos, organizarlo de forma ascendente.
Lista de variables
VEC = nombre del arreglo
N = Registro identificador
i, J= subíndices del vector
AUX = variable auxiliar para ordenar el vector
INICIO BURBUJA
Inicio
Const Int N = 100;
Int VEC[N], num;
Int i;
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)
Inicio
Int j, aux;
Para ( i = 1, (n-1))
j = i + 1
Para (J = ( i + 1); N)
Si (VEC[ i ] > VEC[ j ]) Ent
//Intercambio:
aux = VEC [i];
VEC [i] = VEC[j];
VEC[j] = aux;
Fin-si
Fin-Para
Fin-Para
Fin
2. Ordenamiento Por Inserción directa: En este método una vez que se determina la
posición correcta del elemento, se interrumpen las comparaciones.
Ejemplo Ordenar un vector de 100 posiciones con elementos numéricos enteros.
Lista de variables
VEC = nombre del arreglo
N = Registro identificador
k, m= subíndices del vector
AUX = variable auxiliar para ordenar el vector
INSERCION_DIRECTA ()
Inicio
Const 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)
Inicio
Int m, aux;
PARA (k = 2, N)
aux = VEC[m]
3. k = m - 1
MQ ( (k >=1) && (aux < VEC[k]) ) HAGA
VEC [k+1] = VEC[k]
k = k - 1
Fin-MQ
VEC [k+1] = aux;
Fin-Para
FIN Ordenar
3. Ordenamiento Por Inserción Binaria: El método de ordenación por inserción
directa puede mejorarse fácilmente. Para ello se recurre a una búsqueda binaria
en lugar de una búsqueda secuencial para insertar un elemento en la parte
izquierda del arreglo, que ya se encuentra ordenado. El proceso, al igual que en
método de inserción directa, se repite desde el segundo hasta el n-ésimo
elemento.
Ejemplo Ordenar un vector de 100 posiciones con elementos numéricos enteros
Lista de variables
VEC = nombre del arreglo
N = Registro identificador
x, y= subíndices del vector
AUX = variable auxiliar para ordenar el vector
IZQ = izquierda del vector
DER = derecha del vector
M = variable para almacenar la mitad
INSERCION_BINARIA ()
Inicio
Const 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)
Inicio
Int AUX , IZQ, DER , M, y;
Para (y = 2, N)
AUX = VEC [y];
IZQ = 1
DER = y - 1
MQ (IZQ <= DER)
M = ((IZQ + DER)/2)
4. SI (AUX < = VEC [M]) Ent
DER = M - 1
SINO
IZQ = M + 1
FIN-SI
Fin-MQ
x = y - 1
MQ (x >= IZQ) HAGA
VEC [x + 1] = VEC [x]
x = x - 1
Fin-MQ
VEC [IZQ] = AUX
Fin-PARA
Fin-Ordenar
NOTA: en el método de ordenación por inserción binaria se efectúa el menor número de
comparaciones 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ón
directa es más eficiente que los métodos analizados anteriormente, pero sólo para
vectores pequeños.
La idea básica de este algoritmo consiste en buscar el menor elemento del arreglo y colocarlo en la
primera posición. Luego se busca el segundo elemento más pequeño del arreglo y se lo coloca en
la segunda posición.
El método se basa en los siguientes principios:
Seleccionar el menor elemento del arreglo
Intercambiar dicho elemento con el primero
Repetir los pasos anteriores con los (n-1), (n-2) elementos y así sucesivamente hasta
que sólo quede el elemento mayor.
Ejemplo Ordenar un vector de 100 posiciones con elementos numéricos enteros
Lista de variables
VEC = nombre del arreglo
N = Registro identificador
j, p= subíndices del vector
MENOR = variable auxiliar para ordenar el vector
K = izquierda del vector
ORDENASELECCIONDIRECTA ()
Inicio
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)
Inicio
Int j, MENOR, K, P;
PARA (P = 1, N -1)
MENOR = VEC [P]
K = P
PARA (j = P + 1, N)
SI VEC [j] < MENOR) Ent
MENOR = VEC [j]
K = j
Fin-si
Fin-Para
VEC [K] = VEC [P]
VEC [P] = MENOR
Fin-para
Fin
5. Ordenamiento Por El Método De Shell. Es una mejora del método de inserción
directa que se utiliza cuando el número de elementos a ordenar es grande. El
método se denomina “Shell” -en honor a su inventor Donal Shell- y también
método de inserción sin incrementos decrecientes.
Shell modificó los saltos contiguos resultantes de las comparaciones por saltos de mayor tamaño y
con eso se conseguía la clasificación más rápida. El método se basa en fijar el tamaño de los saltos
constantes, pero de más de una posición.
Supongamos un vector A de seis (6) elementos.
4 12 16 24 36 3
En 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 va
reduciendo a la mitad en cada repetición hasta que el salto o distancia vale 1
6. Para un vector A de N elementos, el primer salto a dar tendrá un valor de N/2, por lo que, para
redondear, se tomará la parte entera de N div 2
Y se iguala a SALTO
Salto = N div 2
El 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 100
elementos
Lista de variables
VEC = nombre del arreglo
N = Registro identificador
J,K,F = subíndices del vector
SALTO = variable auxiliar para ordenar el vector
ORDENAMIENTO_SHELL ()
Inicio
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)
Inicio
Int SALTO, K, F;
SALTO = N div 2
MQ (SALTO > 0) HAGA
PARA (F = (SALTO + 1), N)
J = F - SALTO
Mq (J > 0)
K = J + SALTO
SI (VEC [J] <= VEC [K]) Ent
J = 0
SINO
AUX = VEC [j]
VEC [j] = VEC [k]
VEC [k] = AUX
Fin-si
J = J - SALTO
Fin-MQ
7. Fin-Para
SALTO = SALTO div 2
Fin-MQ
Fin Ordenar
TALLER DE ORDENAMIENTO:
1. Almacenar 50 números en un vector, ordenarlos en forma ascendente y mostrar si
existe o no un número leído desde teclado.
2. Almacenar en vectores paralelos de 50 posiciones, los nombres y cédulas de los
estudiantes de un grupo. Permitir realizar consultas por el número de cédula y
mostrar 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 forma
ascendente 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 la
elecció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.