Está en la página 1de 6

Trabajo

Investigativo
De
Estructura
De
Datos
Tema: Comparación entre Métodos de Ordenamiento.
Nombre: Roger Eusebio Molina Gómez.
Grupo: Info – 25.
Introducción
En computación y matemáticas un algoritmo de ordenamiento es un algoritmo que
pone elementos de una lista o un vector en una secuencia dada por una relación
de orden, es decir, el resultado de salida ha de ser una permutación o
reordenamiento de la entrada que satisfaga la relación de orden dada. Las
relaciones de orden más usadas son el orden numérico y el orden lexicográfico.
Ordenamientos eficientes son importantes para optimizar el uso de otros
algoritmos (como los de búsqueda y fusión) que requieren listas ordenadas para
una ejecución rápida. También es útil para poner datos en forma canónica y para
generar resultados legibles por humanos.
Desde los comienzos de la computación, el problema del ordenamiento ha atraído
gran cantidad de investigación, tal vez debido a la complejidad de resolverlo
eficientemente a pesar de su planteamiento simple y familiar. Por ejemplo,
BubbleSort fue analizado desde 1956.Aunque muchos puedan considerarlo un
problema resuelto, nuevos y útiles algoritmos de ordenamiento se siguen
inventado hasta el día de hoy (por ejemplo, el ordenamiento de biblioteca se
publicó por primera vez en el 2004). Los algoritmos de ordenamiento son comunes
en las clases introductorias a la computación, donde la abundancia de algoritmos
para el problema proporciona una gentil introducción a la variedad de conceptos
núcleo de los algoritmos, como notación de O mayúscula, algoritmos divide y
vencerás, estructuras de datos, análisis de los casos peor, mejor, y promedio, y
límites inferiores.
Desarrollo
Ordenamiento Heapsort.
El ordenamiento por montículos (Heapsort en inglés) es un algoritmo de
ordenamiento no recursivo, no estable, O(n log n), con complejidad computacional.
Este algoritmo consiste en almacenar todos los elementos del vector a ordenar en
un montículo (heap), y luego extraer el nodo que queda como nodo raíz del
montículo (cima) en sucesivas iteraciones obteniendo el conjunto ordenado. Basa
su funcionamiento en una propiedad de los montículos, por la cual, la cima
contiene siempre el menor elemento (o el mayor, según se haya definido el
montículo) de todos los almacenados en él. El algoritmo, después de cada
extracción, recoloca en el nodo raíz o cima, la última hoja por la derecha del último
nivel. Lo cual destruye la propiedad heap del árbol. Pero, a continuación realiza un
proceso de "descenso" del número insertado de forma que se elige a cada
movimiento el mayor de sus dos hijos, con el que se intercambia. Este
intercambio, realizado sucesivamente "hunde" el nodo en el árbol restaurando la
propiedad montículo del árbol y dejando paso a la siguiente extracción del nodo
raíz.
El algoritmo, en su implementación habitual, tiene dos fases. Primero una fase de
construcción de un montículo a partir del conjunto de elementos de entrada, y
después, una fase de extracción sucesiva de la cima del montículo. La
implementación del almacén de datos en el heap, pese a ser conceptualmente un
árbol, puede realizarse en un vector de forma fácil. Cada nodo tiene dos hijos y
por tanto, un nodo situado en la posición i del vector, tendrá a sus hijos en las
posiciones 2 x i, y 2 x i +1 suponiendo que el primer elemento del vector tiene un
índice = 1. Es decir, la cima ocupa la posición inicial del vector y sus dos hijos la
posición segunda y tercera, y así, sucesivamente. Por tanto, en la fase de
ordenación, el intercambio ocurre entre el primer elemento del vector (la raíz o
cima del árbol, que es el mayor elemento del mismo) y el último elemento del
vector que es la hoja más a la derecha en el último nivel. El árbol pierde una hoja y
por tanto reduce su tamaño en un elemento. El vector definitivo y ordenado,
empieza a construirse por el final y termina por el principio.
Ordenamiento Cocktail Sort.
El ordenamiento de burbuja bidireccional (cocktail sort en inglés) es un algoritmo
de ordenamiento que surge como una mejora del algoritmo ordenamiento de
burbuja.
La manera de trabajar de este algoritmo es ir ordenando al mismo tiempo por los
dos extremos del vector. De manera que tras la primera iteración, tanto el menor
como el mayor elemento estarán en sus posiciones finales. De esta manera se
reduce el número de comparaciones aunque la complejidad del algoritmo sigue
siendo O(n²).

Hacemos un recorrido ascendente (del primer elemento al último), cogemos el


primer elemento y lo comparamos con el siguiente, si el siguiente es menor lo
pasamos al puesto anterior, de esta forma al final de la lista nos queda el mayor.
Una vez terminada la serie ascendente, hacemos un recorrido descendente (del
último elemento al primero) pero esta vez nos quedamos con los menores a los
que vamos adelantando posiciones en vez de retrasarlas como hicimos en la serie
ascendente. Repetimos las series alternativamente pero reduciendo el ámbito en
sus extremos pues ya tendremos allí los valores más bajos y más altos de la lista,
hasta que no queden elementos en la serie; en el pseudocódigo de ejemplo: Hasta
(izq > der).
Conclusiones
Con la realización de este trabajo y las comprobaciones realizadas en el Visual
Studio 2012 se puede llegar a la conclusión que de los métodos abordados en
este trabajo el más rápido es el Heapsort. El resultado de la prueba realizada se
puede observar en el anexo No. 1. También sin la comprobación práctica se podía
afirmar que el método Heapsort era más rápida su ejecución que el Cocktail Sort
ya que en la complejidad de Heapsort es O(n log n) y la del Cocktail Sort es
O(n²).
Anexo
Anexo No. 1.

También podría gustarte