Y… ¿Que son los Algoritmos de Ordenamiendo?
Segun Wiki… lol 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.
¿Mas? no frieguen, vayanse a Wiki: Algoritmos de Ordanamiento (Wiki)
Códigos JAVA
Vamos a empezar por poner un poco de contenido en este tema, porque tenia tarea sobre esto y lamentablemente los codigos que poporcionaban eran muy pobres, asi que ahora voy a publicar los mios para que espero mucha gente se beneficie con esto y por lo sencillos que son puedan aprender mas facilmente a realizar los suyos
Se me olvidaba, tambien les doy una breve explicacion y despues un link, porque copiar todo el codigo en la entrada estaba muy de hueva… Entonces, descargan el .rar y en el estan los codigos en .java
Una gran mayoria de los codigos estan ordenando numeros aleatoriamente con la utileria Random de java, y ademas imprimen el tiempo en milisegundos o segundos que tardo en ordenar una cantidad de numeros a ingresar por el usuario…
BubbleSort*
El 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.
Entonces, les incluyo por aca el codigo del bubbleSort en arreglos y en listas, usando la forma tradicional y tambien la bidimensional: http://rapidshare.com/files/149862250/bubbleSort.rar
BucketSort*
El ordenamiento por casilleros (bucket sort en inglés) es un algoritmo de ordenamiento que distribuye todos los elementos a ordenar entre un número finito de casilleros. Cada casillero sólo puede contener los elementos que cumplan unas determinadas condiciones. En el ejemplo esas condiciones son intervalos de números. Las condiciones deben ser excluyentes entre sí, para evitar que un elemento pueda ser clasificado en dos casilleros distintos. Después cada uno de esos casilleros se ordena individualmente con otro algoritmo de ordenación (que podría ser distinto según el casillero), o se aplica recursivamente este algoritmo para obtener casilleros con menos elementos. Se trata de una generalización del algoritmo Pigeonhole sort. Cuando los elementos a ordenar están uniformemente distribuidos la complejidad computacional de este algoritmo es de O(n).
El algoritmo contiene los siguientes pasos:
1. Crear una colección de casilleros vacíos
2. Colocar cada elemento a ordenar en un único casillero
3. Ordenar individualmente cada casillero
4. Devolver los elementos de cada casillero concatenados por orden
http://rapidshare.com/files/149862692/bucketSort.rar
HeapSort*
El ordenamiento por montículos (Heap sort en inglés) es un algoritmo de ordenación no recursivo, no estable, con complejidad computacional O(n log n).
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.
De este tengo mucho material, entonces se los incluyo… uno con un manejo de arreglos, otro con listas de prioridad, y uno muy interesante con java swing: http://rapidshare.com/files/149863276/heapSort.rar
InsertionSort*
Este método es muy parecido al Bubble Sort, solo que un poco mejor, ya que reduce las comparaciones entre los elementos. Un elemento es comparado con el anterior, hasta que se encuentra un elemento más pequeño. Si un elemento contiene un valor menor que todos los elementos anteriores, compara ese elemento con todos los elementos anteriores antes de continuar con la siguiente comparación.
Incluyo el insertion con arrelgos y con LinkedList: http://rapidshare.com/files/149863808/insertionSort.rar
MergeSort*
El algoritmo de Ordenamiento por mezcla (Merge sort en inglés) es un algoritmo de ordenación externo estable basado en la técnica divide y vencerás. Es de complejidad O(n log n).
Los algoritmos que utilizan este principio son en la mayoria de los casis netamente recursivos, aunque pueden ser iterativo, esta tecnica del ordenamiento consiste en dividir en 2 partes iguales el vector o arreglo a ordenar. Ordenar por separado cada una de las partes. Mezclar ambas partes, manteniendo la ordenacion en un solo vector o arreglo.
MergeSort normal y uno utilizando un ‘Extra Storage’ en arreglos: http://rapidshare.com/files/149864272/mergeSort.rar
Odd-even TranspositionSort*
Este no lo entendi mucho, entonces aqui esta la explicacion en ingles… http://rapidshare.com/files/149864905/OddEvenTranspositionSort.rar
QuickSort*
Mi favorito!
Rol del Pivote: Como se puede suponer, la eficiencia del algoritmo depende de la posicion en la que termine el pivote elegido. En el mejor caso, el pivote termina en el centro de la lista, dividiendola en 2 sublistas de igual tamaño, en el peor caso, el pivote termina en un extremo de la lista. No es extraño, pues, que la mayoria de optimizaciones que se aplican a esta tecnica se centran en la eleccion del pivote…
Entonces les pongo uno con el pivote a la izquierda y otro con el pivote al centro: http://rapidshare.com/files/149865252/quickSort.rar
RadixSort*
El ordenamiento Radix (radix sort en inglés) es un algoritmo de ordenamiento que ordena enteros procesando sus dígitos de forma individual. Como los enteros pueden representar cadenas de caracteres (por ejemplo, nombres o fechas) y, especialmente, números en punto flotante especialmente formateados, radix sort no está limitado sólo a los enteros.
Aca les dejo uno terminado y una tarea, para ver que tanto han aprendido, les pongo (a parte del completo y funcionando) uno que esta totalente comentado, encuentren los erroes y solucionenlo, les aseguro que funciona mas rapido que el otro… http://rapidshare.com/files/149865780/radixSort.rar
SelectionSort*
El ordenamiento por selección (Selection Sort en inglés) es un algoritmo de ordenamiento que requiere O(n2) operaciones para ordenar una lista de n elementos. Su funcionamiento es el siguiente:(1)Buscar el mínimo elemento de la lísta. (2)Intercambiarlo con el primero. (3)Buscar el mínimo en el resto de la lista. (4)Intercambiarlo con el segundo. Y en general: Buscar el mínimo elemento entre una posición i y el final de la lista intercambiar el mínimo con el elemento de la posición. http://rapidshare.com/files/149866174/selectionSort.rar
ShellSort*
Es un algoritmo de ordenamiento. El método se denomina Shell en honor de su inventor Donald Shell. Su implementación original, requiere O(n2) comparaciones e intercambios en el peor caso. Un cambio menor presentado en el libro de V. Pratt produce una implementación con un rendimiento de O(nlog2 n) en el peor caso. Esto es mejor que las O(n2) comparaciones requeridas por algoritmos simples pero peor que el óptimo O(n log n). Aunque es fácil desarrollar un sentido intuitivo de cómo funciona este algoritmo, es muy difícil analizar su tiempo de ejecución.
El Shell sort es una generalización del ordenamiento por inserción, teniendo en cuenta dos observaciones:
- El ordenamiento por inserción es eficiente si la entrada está “casi ordenada”.
- El ordenamiento por inserción es ineficiente, en general, porque mueve los valores sólo una posición cada vez.
El algoritmo Shell sort mejora el ordenamiento por inserción comparando elementos separados por un espacio de varias posiciones. Esto permite que un elemento haga “pasos más grandes” hacia su posición esperada. Los pasos múltiples sobre los datos se hacen con tamaños de espacio cada vez más pequeños. El último paso del Shell sort es un simple ordenamiento por inserción, pero para entonces, ya está garantizado que los datos del vector están casi ordenados.
Un algoritmo interesante por lo tanto un codigo interesante… http://rapidshare.com/files/149866642/shellSort.rar
¡Extra! ¡Extra!
Bueno, les inclyo tambien un sitio muy interesante, en donde tienen animaciones flash para el Bubble, Selection, Insertion, Shell, Quick y Merge
Tambien, por si quieren todos los codigos se los pongo todos juntos… para matarse una vez que ya se bajaron todos los separados no? jajaja… http://rapidshare.com/files/149867146/AlgoritmosOrdenacion.rar
hey aver si tambien posteas algo en qpcd.wordpress.com jeje
WHAT?????
I thought that you were talking Chineese!!! jejejeje
En otras palabras, no entendi ni papa….