Algoritmos
Algoritmos
Algoritmos
Año: 2
Fecha: 30-06-22
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.
Los algoritmos de ordenamiento se pueden clasificar en las siguientes maneras:
La más común es clasificar según el lugar donde se realice la ordenación
Algoritmos de ordenamiento interno: en la memoria del ordenador.
Algoritmos de ordenamiento externo: en un lugar externo como un disco duro.
Por el tiempo que tardan en realizar la ordenación, dadas entradas ya ordenadas o
inversamente ordenadas:
Algoritmos de ordenación natural: Tarda lo mínimo posible cuando la entrada está
ordenada.
Algoritmos de ordenación no natural: Tarda lo mínimo posible cuando la entrada
está inversamente ordenada.
Por estabilidad: un ordenamiento estable mantiene el orden relativo que tenían
originalmente los elementos con claves iguales. Por ejemplo, si una lista ordenada
por fecha se reordena en orden alfabético con un algoritmo estable, todos los
elementos cuya clave alfabética sea la misma quedarán en orden de fecha. Otro
caso sería cuando no interesan las mayúsculas y minúsculas, pero se quiere que si
una clave aBC estaba antes que AbC, en el resultado ambas claves aparezcan
juntas y en el orden original: aBC, AbC. Cuando los elementos son indistinguibles
(porque cada elemento se ordena por la clave completa) la estabilidad no interesa.
Los algoritmos de ordenamiento que no son estables se pueden implementar para
que sí lo sean. Una manera de hacer esto es modificar artificialmente la clave de
ordenamiento de modo que la posición original en la lista participe del
ordenamiento en caso de coincidencia.
Los algoritmos se distinguen por las siguientes características:
Complejidad computacional (peor caso, caso promedio y mejor caso) en términos
de n, el tamaño de la lista o arreglo. Para esto se usa el concepto de orden de una
función y se usa la notación O(n). El mejor comportamiento para ordenar (si no se
aprovecha la estructura de las claves) es O(n log n). Los algoritmos más simples son
cuadráticos, es decir O(n²). Los algoritmos que aprovechan la estructura de las
claves de ordenamiento (p. ej. Bucket sort) pueden ordenar en O(kn) donde k es el
tamaño del espacio de claves. Como dicho tamaño es conocido a priori, se puede
decir que estos algoritmos tienen un desempeño lineal, es decir O(n).
Uso de memoria y otros recursos computacionales. También se usa la notación
O(n).
Ordenamiento de burbuja (Bubble Sort en inglés)
Es un sencillo algoritmo de ordenamiento. Funciona revisando cada elemento de la lista
que va a ser ordenada con el siguiente, intercambiándolos de posición si están en el orden
equivocado. Es necesario revisar varias veces toda la lista hasta que no se necesiten más
intercambios, lo cual significa que la lista está ordenada. Este algoritmo obtiene su
nombre de la forma con la que suben por la lista los elementos durante los intercambios,
como si fueran pequeñas “burbujas”. También es conocido como el método del
intercambio directo. Dado que solo usa comparaciones para operar elementos, se lo
considera un algoritmo de comparación, siendo uno de los más sencillos de implementar.