Vous êtes sur la page 1sur 5

Algoritmo de ordenamiento

Algoritmo de ordenamiento
1 computacin y matemticas un algoritmo de ordenamiento es un algoritmo que pone elementos de una lista o un vector en una secuencia dada por una relacin de orden, es decir, el resultado de salida ha de ser una permutacin o reordenamiento de la entrada que satisfaga la relacin de orden dada. Las relaciones de orden ms usadas son el orden numrico y el orden lexicogrfico. Ordenamientos eficientes son importantes para optimizar el uso de otros algoritmos (como los de bsqueda y fusin) que requieren listas ordenadas para una ejecucin rpida. Tambin es til para poner datos en forma cannica y para generar resultados legibles por humanos.

Quicksort en accin sobre una lista de nmeros aleatorios. Las lneas horizontales son valores pivote.

Desde los comienzos de la computacin, el problema del ordenamiento ha atrado gran cantidad de investigacin, tal vez debido a la complejidad de resolverlo [1] 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 da 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 computacin, donde la abundancia de algoritmos para el problema proporciona una gentil introduccin a la variedad de conceptos ncleo de los algoritmos, como notacin de O mayscula, algoritmos divide y vencers, estructuras de datos, anlisis de los casos peor, mejor, y promedio, y lmites inferiores.

Clasificacin
Los algoritmos de ordenamiento se pueden clasificar de las siguientes maneras: La ms comn es clasificar segn el lugar donde se realice la ordenacin 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 ordenacin, dadas entradas ya ordenadas o inversamente ordenadas: Algoritmos de ordenacin natural: Tarda lo mnimo posible cuando la entrada est ordenada. Algoritmos de ordenacin no natural: Tarda lo mnimo posible cuando la entrada est inversamente ordenada. Por estabilidad: un ordenamiento estable mantiene el orden relativo que tenan originalmente los elementos con claves iguales. Por ejemplo, si una lista ordenada por fecha se reordena en orden alfabtico con un algoritmo estable, todos los elementos cuya clave alfabtica sea la misma quedarn en orden de fecha. Otro caso sera cuando no interesan las maysculas y minsculas, 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 posicin original en la lista participe del ordenamiento en caso de coincidencia.

Los algoritmos se distinguen por las siguientes caractersticas: Complejidad computacional (peor caso, caso promedio y mejor caso) en trminos de n, el tamao de la lista o arreglo. Para esto se usa el concepto de orden de una funcin y se usa la notacin O(n). El mejor comportamiento para ordenar (si no se aprovecha la estructura de las claves) es O(n log n). Los algoritmos ms simples son cuadrticos, 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 tamao del espacio de claves. Como dicho tamao es conocido a priori, se puede decir que estos algoritmos tienen un desempeo lineal, es decir O(n). Uso de memoria y otros recursos computacionales. Tambin se usa la notacin O(n).

Estabilidad
Los algoritmos de ordenamiento estable mantienen un relativo preorden total. Esto significa que un algoritmo es estable solo cuando hay dos registros R y S con la misma clave y con R apareciendo antes que S en la lista original. Cuando elementos iguales (indistinguibles entre s), como nmeros enteros, o ms generalmente, cualquier tipo de dato en donde el elemento entero es la clave, la estabilidad no es un problema. De todas formas, se asume que los siguientes pares de nmeros estn por ser ordenados por su primer componente: (4 , 1 ) (3 , 7 ) (3 , 1 ) (5 , 6 )

En este caso, dos resultados diferentes son posibles, uno de los cuales mantiene un orden relativo de registros con claves iguales, y una en la que no: (3 , (3 , 7 ) 1 ) (3 , (3 , 1 ) 7 ) (4 , (4 , 1 ) 1 ) (5 , (5 , 6) 6 ) (orden (o e rd n m antenido) c m ia o a b d)

Los algoritmos de ordenamiento inestable pueden cambiar el orden relativo de registros con claves iguales, pero los algoritmos estables nunca lo hacen. Los algoritmos inestables pueden ser implementados especialmente para ser estables. Una forma de hacerlo es extender artificialmente el cotejamiento de claves, para que las comparaciones entre dos objetos con claves iguales sean decididas usando el orden de las entradas original. Recordar este orden entre dos objetos con claves iguales es una solucin poco prctica, ya que generalmente acarrea tener almacenamiento adicional. Ordenar segn una clave primaria, secundaria, terciara, etc., puede ser realizado utilizando cualquier mtodo de ordenamiento, tomando todas las claves en consideracin (en otras palabras, usando una sola clave compuesta). Si un mtodo de ordenamiento es estable, es posible ordenar mltiples tems, cada vez con una clave distinta. En este caso, las claves necesitan estar aplicadas en orden de aumentar la prioridad. Ejemplo: ordenar pares de nmeros, usando ambos valores (4 , (, 4 (, 3 1 ) 1 ) 1 ) (3 , (, 3 (, 3 7 ) 1 ) 7 ) (3 , (, 4 (, 4 1 ) 6 ) 1 ) (4 , (, 3 (, 4 6 (o in l) ) rig a 7 (despus ) 6 (despus ) de s r e de s r e ordenado ordenado por e segundo v lo l a r) por e p e l rim r v lo a r)

Por otro lado: (, 3 (3 , 7 ) 1 ) (, 3 (4 , 1 ) 1 ) (, 4 (4 , 1 ) 6 ) (, 4 (3 , 6 (despus ) de s r e ordenado por e p e l rim r v lo a r)

7 (d sp ) e us d se ordenando e r por el segundo v lo a r, e o e l rd n p r el p e o rim r v lo a r e p rtu ad ) s e rb o

Lista de algoritmos de ordenamiento


Algunos algoritmos de ordenamiento agrupados segn estabilidad tomando en cuenta la complejidad computacional.
Estables Nombre traducido Ordenamiento de burbuja Nombre original Bubblesort Complejidad O(n) O(n) O(n) O(n) O(n+k) O(n log n) O(n log n) O(n+k) O(nk) O(n) versin recursiva O(n) Inestables Nombre traducido Ordenamiento Shell Nombre original Shell sort Comb sort Ordenamiento por seleccin Ordenamiento por montculos Selection sort Heapsort Smoothsort Ordenamiento rpido Quicksort Complejidad O(n
1.25

Memoria Mtodo O(1) O(1) O(1) O(n) O(n+k) O(n) O(n) O(k) O(n) O(n) No comparativo Intercambio Intercambio Insercin No comparativo No comparativo Mezcla Insercin

Ordenamiento de burbuja bidireccional Cocktail sort Ordenamiento por insercin Ordenamiento por casilleros Ordenamiento por cuentas Ordenamiento por mezcla Ordenamiento con rbol binario Insertion sort Bucket sort Counting sort Merge sort Binary tree sort Pigeonhole sort Ordenamiento Radix Radix sort Distribution sort Gnome sort

Memoria Mtodo O(1) O(1) O(1) O(1) O(1) O(log n) Insercin Intercambio Seleccin Seleccin Seleccin Particin

O(n log n) O(n) O(n log n) O(n log n) Promedio: O(n log n), peor caso: O(n)

Several Unique Sort Promedio: O(n u), peor caso: O(n); u=n; u = nmero nico de registros Cuestionables, imprcticos Nombre traducido Nombre original Bogosort Pancake sorting Complejidad O(n n!), peor: no termina O(n), excepto en mquinas de Von Neumann Promedio: O(n!) Peor: No termina Memoria Mtodo

Randomsort

Referencias
[1] Bubble Sort: An archaeological algorithm analysis (http:// www. cs. duke. edu/ ~ola/ papers/ bubble. pdf). Owen Astrachan

Enlaces externos
Explicacin de los distintos mtodos de ordenamiento en Java. (http://blog.zerial.org/ficheros/ Informe_Ordenamiento.pdf) (pdf) Discusin sobre varios algoritmos de ordenacin y sus caractersticas (http://es.tldp.org/Tutoriales/ doc-programacion-algoritmos-ordenacion/ alg_orden.pdf) (licencia GFDL) (pdf) Animacin de algoritmos de ordenamiento (http://dvegaf. iespana.es/) Animacin de algoritmos de ordenamiento (en ingls) (http:// vision. bc. edu/ ~dmartin/teaching/ sorting/ anim-html/all. html) ALT: Algorithm Learning Tool. Herramienta de apoyo a la enseanza de algoritmos que muestra grficamente su funcionamiento. Permite implementar algoritmos propios y realizar una ejecucin dinmica e interactiva (http:/ / xistral.ei.uvigo.es/ MTPAlgoritmos/index.php?action=VisualizarAlgoritmos& tipo=Ordenacion) Cdigos de Ordenamiento en Python (http://tutorial-python. com.ar)

Fuentes y contribuyentes del artculo

Fuentes y contribuyentes del artculo


Algoritmo de ordenamiento Fuente: http://es.wikipedia.org/w/index.php?oldid=58566014 Contribuyentes: Alexav8, Almorca, Ascnder, Caos, Cesarsorm, Chuffo, Dark Bane, Darkspawn, Elabra sanchez, Emijrp, Fernandomirandamuro, Fractaltigre, Groucho NL, Helios vmg, JGus, JMPerez, Jesuja, JorgeGG, Lahi, Libertad y Saber, Loxosceles Laeta, Magister Mathematicae, Michada, Miguelo on the road, Moriel, Pablo.cl, Plux, Sauron, Snakeyes, Tano4595, Triku, Zerial, 65 ediciones annimas

Fuentes de imagen, Licencias y contribuyentes


Archivo:Sorting quicksort anim.gif Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Sorting_quicksort_anim.gif Licencia: Creative Commons Attribution-ShareAlike 3.0 Unported Contribuyentes: Wikipedia:en:User:RolandH

Licencia
Creative Commons Attribution-Share Alike 3.0 Unported //creativecommons.org/licenses/by-sa/3.0/

Vous aimerez peut-être aussi