fbpx
Wikipedia

Algoritmo de ordenamiento

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.

Quicksort en acción sobre una lista de números aleatorios. Las líneas horizontales son valores pivote.

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.[1]​ 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.

Clasificación

Los algoritmos de ordenamiento se pueden clasificar en las siguientes maneras:

  • 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).

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 números enteros, o más 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 números están 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, 7) (3, 1) (4, 1) (5, 6) (orden mantenido) (3, 1) (3, 7) (4, 1) (5, 6) (orden cambiado) 

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 solución poco práctica, ya que generalmente acarrea tener almacenamiento adicional.

Ordenar según una clave primaria, secundaria, terciara, etc., puede ser realizado utilizando cualquier método de ordenamiento, tomando todas las claves en consideración (en otras palabras, usando una sola clave compuesta). Si un método de ordenamiento es estable, es posible ordenar múltiples í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 números, usando ambos valores

(4, 1) (3, 7) (3, 1) (4, 6) (original) 
(4, 1) (3, 1) (4, 6) (3, 7) (después de ser ordenado por el segundo valor) (3, 1) (3, 7) (4, 1) (4, 6) (después de ser ordenado por el primer valor) 

Por otro lado:

(3, 7) (3, 1) (4, 1) (4, 6) (después de ser ordenado por el primer valor) (3, 1) (4, 1) (4, 6) (3, 7) (después de ser ordenando por el segundo valor, el orden por el primer valor es perturbado) 

Lista de algoritmos de ordenamiento

Algunos algoritmos de ordenamiento agrupados según estabilidad tomando en cuenta la complejidad computacional.

Estables
Nombre traducido Nombre original Complejidad Memoria Método
Ordenamiento de burbuja Bubblesort O(n²) O(1) Intercambio
Ordenamiento de burbuja bidireccional Cocktail sort O(n²) O(1) Intercambio
Ordenamiento por inserción Insertion sort O(n²) O(1) Inserción
Ordenamiento por casilleros Bucket sort O(n) O(n) No comparativo
Ordenamiento por cuentas Counting sort O(n+k) O(n+k) No comparativo
Ordenamiento por mezcla Merge sort O(n log n) O(n) Mezcla
Ordenamiento con árbol binario Binary tree sort O(n log n) O(n) Inserción
Pigeonhole sort O(n+k) O(k)
Ordenamiento Radix Radix sort O(nk) O(n) No comparativo
Distribution sort O(n³) versión recursiva O(n²)
Gnome sort O(n²) O(1)
Inestables
Nombre traducido Nombre original Complejidad Memoria Método
Ordenamiento Shell Shell sort O(n1.25) O(1) Inserción
Comb sort O(n log n) O(1) Intercambio
Ordenamiento por selección Selection sort O(n²) O(1) Selección
Ordenamiento por montículos Heapsort O(n log n) O(1) Selección
Smoothsort O(n log n) O(1) Selección
Ordenamiento rápido Quicksort Promedio: O(n log n),
peor caso: O(n²)
O(log n) Partición
Several Unique Sort Promedio: O(n u),
peor caso: O(n²);
u=n; u = número único de registros
Cuestionables, imprácticos
Nombre traducido Nombre original Complejidad Memoria Método
Bogosort O(n × n!), peor: no termina
Ordenamiento de panqueques Pancake sorting O(n), excepto en
máquinas de Von Neumann
Ordenamiento Aleatorio Randomsort Promedio: O(n!) Peor: No termina

Referencias

  1. Bubble Sort: An archaeological algorithm analysis. Owen Astrachan

Enlaces externos

  • Explicación de los distintos métodos de ordenamiento en Java. (pdf)
  • Discusión sobre varios algoritmos de ordenación y sus características (licencia GFDL) (pdf)
  •   Datos: Q181593
  •   Multimedia: Sort algorithms

algoritmo, ordenamiento, computación, matemáticas, algoritmo, ordenamiento, algoritmo, pone, elementos, lista, vector, secuencia, dada, relación, orden, decir, resultado, salida, permutación, reordenamiento, entrada, satisfaga, relación, orden, dada, relacione. En computacion y matematicas un algoritmo de ordenamiento es un algoritmo que pone elementos de una lista o un vector en una secuencia dada por una relacion de orden es decir el resultado de salida ha de ser una permutacion o reordenamiento de la entrada que satisfaga la relacion de orden dada Las relaciones de orden mas usadas son el orden numerico y el orden lexicografico Ordenamientos eficientes son importantes para optimizar el uso de otros algoritmos como los de busqueda y fusion que requieren listas ordenadas para una ejecucion rapida Tambien es util para poner datos en forma canonica y para generar resultados legibles por humanos Quicksort en accion sobre una lista de numeros aleatorios Las lineas horizontales son valores pivote Desde los comienzos de la computacion el problema del ordenamiento ha atraido gran cantidad de investigacion tal vez debido a la complejidad de resolverlo eficientemente a pesar de su planteamiento simple y familiar Por ejemplo BubbleSort fue analizado desde 1956 1 Aunque muchos puedan considerarlo un problema resuelto nuevos y utiles algoritmos de ordenamiento se siguen inventado hasta el dia de hoy por ejemplo el ordenamiento de biblioteca se publico por primera vez en el 2004 Los algoritmos de ordenamiento son comunes en las clases introductorias a la computacion donde la abundancia de algoritmos para el problema proporciona una gentil introduccion a la variedad de conceptos nucleo de los algoritmos como notacion de O mayuscula algoritmos divide y venceras estructuras de datos analisis de los casos peor mejor y promedio y limites inferiores Indice 1 Clasificacion 2 Estabilidad 3 Lista de algoritmos de ordenamiento 4 Referencias 5 Enlaces externosClasificacion EditarLos algoritmos de ordenamiento se pueden clasificar en las siguientes maneras La mas comun es clasificar segun el lugar donde se realice la ordenacion 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 ordenacion dadas entradas ya ordenadas o inversamente ordenadas Algoritmos de ordenacion natural Tarda lo minimo posible cuando la entrada esta ordenada Algoritmos de ordenacion no natural Tarda lo minimo posible cuando la entrada esta inversamente ordenada Por estabilidad un ordenamiento estable mantiene el orden relativo que tenian originalmente los elementos con claves iguales Por ejemplo si una lista ordenada por fecha se reordena en orden alfabetico con un algoritmo estable todos los elementos cuya clave alfabetica sea la misma quedaran en orden de fecha Otro caso seria cuando no interesan las mayusculas y minusculas 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 si lo sean Una manera de hacer esto es modificar artificialmente la clave de ordenamiento de modo que la posicion original en la lista participe del ordenamiento en caso de coincidencia Los algoritmos se distinguen por las siguientes caracteristicas Complejidad computacional peor caso caso promedio y mejor caso en terminos de n el tamano de la lista o arreglo Para esto se usa el concepto de orden de una funcion y se usa la notacion O n El mejor comportamiento para ordenar si no se aprovecha la estructura de las claves es O n log n Los algoritmos mas simples son cuadraticos 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 tamano del espacio de claves Como dicho tamano es conocido a priori se puede decir que estos algoritmos tienen un desempeno lineal es decir O n Uso de memoria y otros recursos computacionales Tambien se usa la notacion O n Estabilidad EditarLos 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 si como numeros enteros o mas 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 numeros estan 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 7 3 1 4 1 5 6 orden mantenido 3 1 3 7 4 1 5 6 orden cambiado 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 solucion poco practica ya que generalmente acarrea tener almacenamiento adicional Ordenar segun una clave primaria secundaria terciara etc puede ser realizado utilizando cualquier metodo de ordenamiento tomando todas las claves en consideracion en otras palabras usando una sola clave compuesta Si un metodo de ordenamiento es estable es posible ordenar multiples items cada vez con una clave distinta En este caso las claves necesitan estar aplicadas en orden de aumentar la prioridad Ejemplo ordenar pares de numeros usando ambos valores 4 1 3 7 3 1 4 6 original 4 1 3 1 4 6 3 7 despues de ser ordenado por el segundo valor 3 1 3 7 4 1 4 6 despues de ser ordenado por el primer valor Por otro lado 3 7 3 1 4 1 4 6 despues de ser ordenado por el primer valor 3 1 4 1 4 6 3 7 despues de ser ordenando por el segundo valor el orden por el primer valor es perturbado Lista de algoritmos de ordenamiento EditarAlgunos algoritmos de ordenamiento agrupados segun estabilidad tomando en cuenta la complejidad computacional EstablesNombre traducido Nombre original Complejidad Memoria MetodoOrdenamiento de burbuja Bubblesort O n O 1 IntercambioOrdenamiento de burbuja bidireccional Cocktail sort O n O 1 IntercambioOrdenamiento por insercion Insertion sort O n O 1 InsercionOrdenamiento por casilleros Bucket sort O n O n No comparativoOrdenamiento por cuentas Counting sort O n k O n k No comparativoOrdenamiento por mezcla Merge sort O n log n O n MezclaOrdenamiento con arbol binario Binary tree sort O n log n O n InsercionPigeonhole sort O n k O k Ordenamiento Radix Radix sort O nk O n No comparativoDistribution sort O n version recursiva O n Gnome sort O n O 1 InestablesNombre traducido Nombre original Complejidad Memoria MetodoOrdenamiento Shell Shell sort O n1 25 O 1 InsercionComb sort O n log n O 1 IntercambioOrdenamiento por seleccion Selection sort O n O 1 SeleccionOrdenamiento por monticulos Heapsort O n log n O 1 SeleccionSmoothsort O n log n O 1 SeleccionOrdenamiento rapido Quicksort Promedio O n log n peor caso O n O log n ParticionSeveral Unique Sort Promedio O n u peor caso O n u n u numero unico de registrosCuestionables impracticosNombre traducido Nombre original Complejidad Memoria MetodoBogosort O n n peor no terminaOrdenamiento de panqueques Pancake sorting O n excepto enmaquinas de Von NeumannOrdenamiento Aleatorio Randomsort Promedio O n Peor No terminaReferencias Editar Bubble Sort An archaeological algorithm analysis Owen AstrachanEnlaces externos EditarExplicacion de los distintos metodos de ordenamiento en Java pdf Discusion sobre varios algoritmos de ordenacion y sus caracteristicas licencia GFDL pdf Animacion de algoritmos de ordenamiento Animacion de algoritmos de ordenamiento en ingles ALT Algorithm Learning Tool Herramienta de apoyo a la ensenanza de algoritmos que muestra graficamente su funcionamiento Permite implementar algoritmos propios y realizar una ejecucion dinamica e interactiva Codigos de Ordenamiento en Python Datos Q181593 Multimedia Sort algorithms Obtenido de https es wikipedia org w index php title Algoritmo de ordenamiento amp oldid 138808724, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos