Logo Studenta

Metodos de ordenamiento

¡Este material tiene más páginas!

Vista previa del material en texto

Métodos de ordenamiento 
Son operaciones para organizar y ordenar 
un conjunto de datos (por ej.: 
vectores, archivos), con un determinado 
criterio u orden. 
A continuación veremos diferentes 
métodos, que se diferencian 
principalmente en su complejidad y 
eficiencia. 
 
Método de la burbuja 
(Bubble sort) 
Este método es el mas sencillo de 
implementar. 
 Se basa en comparaciones (if), con la 
utilización de una variable auxiliar, que 
permite intercambiar el contenido de 2 
posiciones (para no perder el contenido de 
estos), en un vector. 
A su vez, es el método que mas 
comparaciones hace, por lo que resulta el 
menos eficiente. 
Método de la burbuja 
(Bubble sort) 
 Se basa en el siguiente razonamiento: 
Ej.: cargo 2 números en un vector: 10, 5, quiero 
ordenarlos de menor a mayor. 
Lo resuelvo con una comparación: 
 
si vector(1) > vector(2) entonces 
 auxiliar = vector(1) 
 vector(1) = vector(2) 
 vector(2) = auxiliar 
fin si 
Método de la burbuja 
(Bubble sort) 
Si tenemos mas elementos (n), llegamos al algoritmo 
genérico, agregando 2 ciclos para (for): 
 
para i = 1 hasta n 
 para j = 1 hasta n-1 
 si vector(j) > vector(j+1) entonces 
 auxiliar = vector(j) 
 vector(j) = vector(j+1) 
 vector(j+1) = auxiliar 
 fin si 
 fin para j 
fin para i 
Método de la burbuja 
(Bubble sort) 
El segundo ciclo para, se ejecuta n-1 veces, 
dado que es la cantidad de comparaciones 
necesarias para que los elementos queden 
ordenados. 
La eficiencia de este algoritmo, es 
independiente de que tan ordenados estén 
los números (porque compara uno por 
uno). 
Método de inserción 
(Insertion sort) 
También conocido como método de la baraja, por 
la forma en la que se intercambian los 
elementos. 
 Consiste en insertar uno de los elementos entre 
uno menor y otro mayor, de modo que se 
desplazaran los elementos para ubicarlo. 
Se utilizan ciclos, comparaciones, y banderas 
(flags). 
Una bandera es una variable binaria, que tiene un 
funcionamiento similar al de un interruptor 
(prendido/apagado). 
 
Método de inserción 
(Insertion sort) 
Tenemos un vector, ej.: 2 7 3 5 4 
Tomamos el 4, es mayor que 3 y menor que 5, 
lo insertamos en ese lugar. 
obtenemos: 2 7 3 4 5 
A este proceso se le agrega un ciclo para, un 
ciclo mientras, y una bandera, para llegar al 
siguiente código: 
Método de inserción 
(Insertion sort) 
para i = 2 hasta n 
 auxiliar = vector(i) 
 k = i - 1 
 bandera = 0 „(simula el estado apagada o false) 
 mientras (bandera = 0) y (k >= 1) 
 si auxiliar < vector(k) entonces 
 vector(k+1)=vector(k) 
 k = k - 1 
 sino 
 bandera = 1 „(simula el estado prendida o true) 
 fin si 
 fin mientras 
 vector(k+1) = auxiliar 
fin para i 
 
 
Método de inserción 
(Insertion sort) 
Este método tendrá su cantidad de 
comparaciones e inserciones, dependientes 
de que tan ordenado estén los elementos, 
siendo el mínimo=n-1 (para el mejor caso). 
Tiene complejidad media-baja en su 
implementación, y resulta muy útil para 
conjuntos con pocos elementos. 
 
Método de selección 
(Selection sort) 
 Este método es bastante sencillo, si se conoce 
como obtener el mayor o menor 
elemento de un vector. 
Si se desea ordenar de menor a mayor; se 
buscara el menor y en caso contrario se 
buscara el mayor. 
Cuando se obtiene el menor (caso: menor a 
mayor), se lo ubica en la primera posición del 
vector; luego se busca el segundo menor en la 
segunda posición, y así sucesivamente. 
Método de selección 
(Selection sort) 
Como primer paso, buscamos el menor elemento (y lo 
trasladamos a la primera posición), utilizando una 
lógica de búsqueda: 
 
minimo = vector(1) 
para j = 2 hasta n 
 si vector(j) < vector(1) entonces 
 minimo = vector(j) 
 fin si 
fin para j 
vector(1) = minimo 
Método de selección 
(Selection sort) 
De forma genérica, agregamos un ciclo para hasta n-1 (dado que el 
ultimo quedara ordenado) 
 
para i = 1 hasta n-1 
 minimo = vector(i) 
 posicion = i 
 para j = i + 1 hasta n 
 si vector(j) < minimo entonces 
 minimo = vector(j) 
 posicion = j 
 fin si 
 fin para j 
 vector(posicion) = vector(i) 
 vector(i) = minimo 
fin para i 
Método de selección 
(Selection sort) 
Este método, realizara menos comparaciones 
que el método de la burbuja y también es 
independiente de que tan ordenados están 
los elementos. 
Su complejidad es baja, casi al nivel del 
método de la burbuja. 
Método de Shell 
(Shell sort) 
Es una mejora del método de inserción 
(creado por Donald Shell), basado en la 
cantidad de comparaciones; esto hace 
que sea una mejor opción para una mayor 
cantidad de elementos. 
Las comparaciones se reducen mediante 
pasos mas grandes, que permiten llegar mas 
rápido al intercambio (inserción). 
 
Método de Shell 
(Shell sort) 
 Se toma como paso n/2 (siendo “n” la 
cantidad de elementos), se divide 
sucesivamente hasta que sea igual a 1 
(aplicando redondeo en las divisiones), y a 
eso le llamaremos “salto”. 
La lógica es mas compleja, pero como 
beneficio tenemos mayor eficiencia en el 
algoritmo: 
Método de Shell 
(Shell sort) 
salto = int(n/2) 
mientras salto >= 1 
 para i = salto + 1 hasta n 
 j = i - salto 
 mientras j>0 
 k = j + salto 
 si vector(j) <= vector(k) entonces 
 j=0 
 sino 
 auxiliar = vector(j) 
 vector(j) = vector(k) 
 vector(j) = auxiliar 
 fin si 
 j = j - salto 
 fin mientras 
 fin para i 
 salto = int(salto/2) 
fin mientras 
Método de Shell 
(Shell sort) 
Como se puede ver en el código, es un algoritmo 
refinado del método de inserción, sin mas que 
la variable “salto”, cuya finalidad es disminuir la 
cantidad de comparaciones. 
Los saltos son dependientes de la cantidad de 
números y de que tan ordenados están estos; 
esto hace que sea muy difícil determinar 
cuantas comparaciones necesitamos para 
ordenar un conjunto de elementos. 
Método de ordenación rápida 
(Quicksort) 
Este método es el mas rápido de los 5 en 
estudio, basado en la técnica “divide y 
vencerás”. 
Esta técnica nos dice que resolver un 
problema entero, naturalmente es mas difícil 
que resolverlo en partes. 
 
Método de ordenación rápida 
(Quicksort) 
Se divide la lista de elementos en 2 listas, y un 
“pivote” (elemento especifico). El pivote es un 
elemento de la lista, deberá utilizarse un criterio 
para la elección del mismo. 
Una de las listas debe contener todos sus valores 
menores que el pivote, y la otra todos sus valores 
mayores a este. 
Cada lista se ordenara con la misma técnica 
(intercambiar mayores y menores), por lo que se 
utilizara la recursividad. 
A continuación, un DFD que representa esta lógica. 
Método de ordenación rápida 
(Quicksort) 
Método de ordenación rápida 
(Quicksort) 
Llamar a quicksort 1 , n 
procedimiento quicksort inicio , fin 
 i = inicio 
 j = fin 
 pivote = vector(i) 
 mientras i <= j 
 mientras vector(i) < x 
 i = i + 1 
 fin mientras 
 mientras vector(j) > x 
 j = j – 1 
 fin mientras 
 si i <= j entonces 
 auxiliar = vector(i) 
 vector(i) = vector(j) 
 vector(j) = auxiliar 
 i = i + 1 
 j = j – 1 
 fin si 
 fin mientras 
 si j > inicio entonces 
 llamar a quicksort inicio , j 
 fin si 
 si i < fin entonces 
 llamar a quicksort i , fin 
 fin si 
fin procedimientoMétodo de ordenación rápida 
(Quicksort) 
Como vemos, es el mas complejo y el mas 
eficiente a la vez; por lo que es el mas 
utilizado (porque mayormente se busca 
eficiencia en los algoritmos). 
Pero esta es una implementación que utiliza el 
criterio del primer elemento como pivote; 
existen mas criterios, y estos también 
determinan la eficiencia del algoritmo.

Continuar navegando

Otros materiales