0% encontró este documento útil (0 votos)
2K vistas16 páginas

Métodos de Ordenamiento en Algoritmos

Este documento presenta un resumen de diferentes métodos de ordenamiento como el método de la burbuja, ShellSort, QuickSort, intercalación y RadixSort. Fue presentado por estudiantes de Ingeniería en Sistemas Computacionales como proyecto final para la asignatura de Estructura de Datos en el tercer semestre. Explica conceptos básicos de ordenamiento y detalla los algoritmos y ejemplos de cada método.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
2K vistas16 páginas

Métodos de Ordenamiento en Algoritmos

Este documento presenta un resumen de diferentes métodos de ordenamiento como el método de la burbuja, ShellSort, QuickSort, intercalación y RadixSort. Fue presentado por estudiantes de Ingeniería en Sistemas Computacionales como proyecto final para la asignatura de Estructura de Datos en el tercer semestre. Explica conceptos básicos de ordenamiento y detalla los algoritmos y ejemplos de cada método.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

INGENIERA EN SISTEMAS COMPUTACIONALES

MATERIA:
Estructura de Datos

TEMA:
METODOS DE ORDENAMIENTO

TERCER SEMESTRE

PRESENTA:
PORFIRIO AGUILAR TREJO ALVARO SANCHEZ SANCHEZ CESAR SUAREZ GUZMAN FERNANDA SANCHEZ SANCHEZ MARTHA COYOTL ZINCAXTLE AJALPAN, PUEBLA, DICIEMBRE DE 2012

PROYECTO FINAL METODOS DE ORDENAMIENTO

5 DE DICIEMBRE DE 2012 2

INDICE
METODOS DE ORDENAMIENTO. 3 Metodo de ordenamiento burbuja 4

Mtodo de ShellSort.. 6 Mtodo de QuickSort. 10 Mtodo de Intercalacion. 13 Mtodo de RadixSort. .. 15

PROYECTO FINAL METODOS DE ORDENAMIENTO


Qu es ordenamiento?

5 DE DICIEMBRE DE 2012 3

Es la operacin de arreglar los elementos en algn orden secuencial de acuerdo a un criterio de ordenamiento. El propsito principal de un ordenamiento es el de facilitar las bsquedas de los miembros del conjunto ordenado. El ordenar un grupo de datos significa mover los datos o sus referencias para que queden en una secuencia por categoras y en forma ascendente o descendente. Cundo conviene usar un mtodo de ordenamiento? Cuando se requiere hacer una cantidad considerable de bsquedas y es importante el factor tiempo.

PROYECTO FINAL METODOS DE ORDENAMIENTO


METODO DE ORDENAMIENTO BURBUJA

5 DE DICIEMBRE DE 2012 4

El Ordenamiento de Burbuja (BubbleSort en ingls)

es un sencillo algoritmo de

ordenamiento. Funciona revisando cada elemento de la lista que va a ser ordenada con el siguiente, intercambindolos de posicin si estn en el orden equivocado. Es necesario revisar varias veces toda la lista hasta que no se necesiten ms 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 pequeas burbujas". Tambin es conocido como el mtodo del intercambio directo.

ALGORITMO

Para i = 0 condicion i < (Numero de elementos de a) paso i+1 Hacer Para j = 0 condicin j < (Numero de elementos de a) paso j+1 Hacer Si a[J] > a[J+1] Entonces Hacer aux = a[J] a[J] = a[J+1] a[J+1] = aux Fin del ciclo Para Fin del ciclo Para

PROYECTO FINAL METODOS DE ORDENAMIENTO


EJERCICIO

5 DE DICIEMBRE DE 2012 5

Vemos un ejemplo sencillo. Supongamos que queremos ordenar estos valores con el algoritmo de la burbuja: 45, 52, 21, 37, 49, as pues, n=5 1. Pasada: comparamos cada uno de los cuatro primeros (n-1) con los que le siguen. Si un elemento no est en orden con respecto al siguiente, los intercambiamos de sitio y seguimos. El elemento de mayor valor (52) ir "ascendiendo" hasta la ltima posicin. 45, 52, 21, 37, 49 Comparar 45 y 52. (1 y 2) Estn en orden. Seguimos. 45, 52, 21, 37, 49 Comparar 52 y 21. (2 y 3) No estn en orden. Intercambio. 45, 21, 52, 37, 49 seguimos 45, 21, 52, 37, 49 Comparar 52 y 37 (3 y 4). No estn en orden. Intercambio. 45, 21, 37, 52, 49 seguimos 45, 21, 37, 52, 49 Comparar 52 y 49. (4 y 5). No estn en orden. Intercambio. 45, 21, 37, 49, 52 Ya hemos terminado esta pasada. 45, 21, 37, 49, 52 El 5 elemento ya est en su sitio.

2. Pasada: comparamos cada uno de los tres primeros (n-2) con los que le siguen. No llegamos a hacer comparaciones que involucren al 5 elemento, porque la primera pasada hizo que el mayor de todos los elementos ocupara la ltima posicin, con lo cual, sabemos que ese ya est en su sitio. Trabajaremos slo con los cuatro que quedan. 45, 21, 37, 49, 52 Comparar 1 y 2. No estn en orden. Intercambio. 21, 45, 37, 49, 52 seguimos 21, 45, 37, 49, 52 Comparar 2 y 3. No estn en orden. Intercambio. 21, 37, 45, 49, 52 seguimos 21, 37, 45, 49, 52 Comparar 3 y 4. Estn en orden. Pasada terminada. 21, 37, 45, 49, 52 El 4 elemento ya est en su sitio. (Fjate en que el array ya est en orden, pero algoritmicamente, eso no lo sabemos).

PROYECTO FINAL METODOS DE ORDENAMIENTO

5 DE DICIEMBRE DE 2012 6

3. Pasada: Comparamos cada uno de los dos primeros (n-3) con los siguientes. 21, 37, 45, 49, 52 1 y 2. Estn en orden. Seguimos. 21, 37, 45, 49, 52 2 y 3. Estn en orden. Pasada terminada. 21, 37, 45, 49, 52 Ya tenemos tres en orden.

4. Ultima pasada: Comparamos el primero con el segundo.

21, 37, 45, 49, 52 1 y 2 estn en orden. Pasada terminada. 21, 37, 45, 49, 52 Ya tenemos los cuatro ltimos en orden. 21, 37, 45, 49, 52 As pues, el primero tambin lo est.

METODO DE ORDENAMIENTO SHELLSORT

QUE ES EL MTODO DE ORDENAMIENTO SHELLSORT.

Debe su nombre al ingeniero y matemtico estadounidense Donald Shell, que lo public en la revista Communications of the ACM en 1959.

Es un algoritmo de ordenacin interna muy sencillo pero muy ingenioso, basado en comparaciones e intercambios, y con unos resultados radicalmente mejores que los que se pueden obtener con el mtodo de la burbuja, el de seleccin directa o el de insercin directa. Ya que es el mejor algoritmo de ordenacin in-situ... es decir, el mejor de aquellos en los que la cantidad de memoria adicional que necesita aparte de los propios datos a ordenar, claro est es constante, sea cual sea la cantidad de datos a ordenar.

CARACTERSTICAS

PROYECTO FINAL METODOS DE ORDENAMIENTO

5 DE DICIEMBRE DE 2012 7

Se trata de un algoritmo de ordenacin interna. Al igual que cualquier otro de ordenacin interna (los datos estn en memoria principal). Se basa en comparaciones e intercambios. Necesita que el tiempo de acceso a cualquier dato sea constante (es decir, fue ideado para trabajar con arrays, arrays de referencias o punteros). En estructuras, como listas enlazadas, etc. No es estable: dados dos elementos que al compararlos sean "iguales" no mantienen necesariamente el orden relativo inicial entre ellos. El estudio de su complejidad no es trivial, sino todo lo contrario. La implementacin original de Shell tiene una complejidad en el peor caso de O(n2), aunque en un caso promedio o en casos tpicos comprobados empricamente, los resultados son mucho mejores que con la burbuja, seleccin directa o insercin directa, cuya complejidad en el peor caso tambin es del orden de O(n2). void ordenacion_shell (Dato * A, int N) { int incr = N / 2, p, j; Dato tmp; do { for (p = incr + 1; p < N; p++) { tmp = A[p]; j = p - incr; while ((j >= 0) && (tmp < A[j])) { A[j + incr] = A[j]; 7Algoritmos de ordenacin ALGORITMO

PROYECTO FINAL METODOS DE ORDENAMIENTO


j -= incr; } A[j + incr] = tmp; } incr /= 2; } while (incr > 0); }

5 DE DICIEMBRE DE 2012 8

EJEMPLO DEL ALGORITMO

El fundamento: la k-ordenacin. Imaginemos una lista de datos ordenables... por ejemplo, estos enteros: 74, 14, 21, 44, 38, 97, 11, 78, 65, 88, 30 Pueden ser datos de cualquier tipo, siempre y cuando tengan un criterio de ordenacin para compararlos. Cada uno de estos enteros, mantiene una posicin en la lista (o array).Los enteros estn comprendidos entre el 11 (el ms pequeo) y el 97 (el ms grande) y que parecen ms o menos uniformemente distribuidos. La idea bsica del ShellSort: si podemos desplazar "a grosso modo" los elementos ms grandes hacia el final y los ms pequeos hacia el principio con poco esfuerzo, estaremos dejando cada elemento ms cerca de su ubicacin definitiva. Si finalmente aplicamos un mtodo como InsertionSort, cada elemento se tendr que desplazar pocos lugares. Shell nos propone que hagamos sobre el array una serie de ordenaciones basadas en la insercin directa, pero dividiendo el array original en varios sub-arrays tales que cada elemento est separado k elementos del anterior (a esta separacin a menudo se le llama salto o gap)... Se debe empezar con k=n/2, siendo n el nmero de elementos de array, y utilizando siempre la divisin entera.... despus iremos variando k hacindolo ms pequeo mediante sucesivas divisiones por 2, hasta llegar a k=1 En el ejemplo, n=11 (porque hay 11 elementos). As que k=n/2 = 11/2=5

PROYECTO FINAL METODOS DE ORDENAMIENTO

5 DE DICIEMBRE DE 2012 9

Empezamos con k=[Link] a dividir nuestro array original en 5 sub-arrays, en los cuales, sus elementos estarn separados por 5 lugares del array original (el salto o gap es 5). Tomamos el primer elemento (el 74) contamos 5 lugares y tomamos tambin otro elemento (el 97) volvemos a contar 5 y tomamos otro (el 30). El primer sub-array con k=5 es el que est formado por 74, 97 y 30. Vamos a pintarlos en rojo 74, 14, 21, 44, 38, 97, 11, 78, 65, 88, 30 Ahora, ordenaremos los elementos del sub-array rojo pero slo entre ellos, utilizando el algoritmo de Insercin directa. 30, 14, 21, 44, 38, 74, 11, 78, 65, 88, 97 Formemos ahora otro sub-array con salto k=[Link] del segundo elemento (el 14) contando 5 (tomamos tambin el 11) 30, 14, 21, 44, 38, 74, 11, 78, 65, 88, 97 Vamos a ordenarlos entre ellos con Insercin directa... el 11 primero y el 14 despus. 30, 11, 21, 44, 38, 74, 14, 78, 65, 88, 97 Ahora partimos del tercer elemento el 21 y el 78 30, 11, 21, 44, 38, 74, 14, 78, 65, 88, 97 Estn en orden entre ellos, as que se quedan como estn. Ahora le toca al sub-array formado por el 44 y el 65 30, 11, 21, 44, 38, 74, 14, 78, 65, 88, 97 Que tambin estn en orden entre ellos... y finalmente el 38 y el 88, que tambin estn en orden. 30, 11, 21, 44, 38, 74, 14, 78, 65, 88, 97 Hemos formado 5 sub-arrays en los cuales los elementos estn separados por 5 lugares (porque k=5). Hemos ordenado cada sub-array por separado utilizando insercin directa, y hemos logrado que cada elemento se dirija hacia su ubicacin definitiva en pasos de 5 lugares. Ahora el array est 5 ordenado. Para continuar con el algoritmo, debemos ir reduciendo progresivamente k dividindolo sucesivamente por 2. Cuando lleguemos a k=1 habremos terminado. El array es 5, as que ahora kk/2 = 5/2=2

PROYECTO FINAL METODOS DE ORDENAMIENTO

5 DE DICIEMBRE DE 2012 10

Nueva k vale 2. Ahora nos saldrn 2 sub-arrays cuyos elementos estn separados por 2 lugares. El primero (en marrn) y el segundo (en verde): 30, 11, 21, 44, 38, 74, 14, 78, 65, 88, 97 Ordenamos por un lado los marrones entre ellos y los verdes entre ellos. 14, 11, 21, 44, 30, 74, 38, 78, 65, 88, 97 Ahora, cada nmero est mucho ms cerca de su posicin definitiva. Finalmente, calculamos un nuevo k dividiendo el que tenemos entre 2. Kk/2 = 2/2=1 Hemos llegado a k=1. Cuando k es 1 slo podemos obtener 1 sub-array cuyos elementos estn separados 1 posicin en el propio array original. Cuando k es 1, el algoritmo de Shell se comporta exactamente igual que el de insercin directa sobre todo el array.

Sin embargo, las k-ordenaciones que hemos hecho (con k=5 y k=2) han hecho que cada elemento se aproximase con saltos de 5 y luego de 2 posiciones hacia su ubicacin definitiva. Ahora que k=1 y que vamos a aplicar el algoritmo de insercin directa. Finalmente, el array queda de sta manera: 11, 14, 21, 30, 38, 44, 65, 74, 78, 88, 97 Cada elemento descolocado ha tenido que moverse pocos lugares.

METODO DE QUICKSORT

QUE ES ELMETODO DE QUICKSORT?

Este mtodo es una mejora sustancial del mtodo de intercambio directo y recibe el nombre de Quick Sort por la velocidad con que ordena los elementos del arreglo .es un algoritmo basado en la tcnica de divide y vencers, que permite, en promedio, ordenar n elementos en un tiempo proporcional a n log n. El algoritmo original es recursivo, pero se utilizan versiones iterativas para mejorar su rendimiento (los algoritmos recursivos son en general ms lentos que los iterativos, y consumen ms recursos.

PROYECTO FINAL METODOS DE ORDENAMIENTO


Descripcin del algoritmo

5 DE DICIEMBRE DE 2012 11

1. Elegir un elemento de la lista de elementos a ordenar, al que llamaremos pivote. 2. Resituar los dems elementos de la lista a cada lado del pivote, de manera que a un lado queden todos los menores que l, y al otro los mayores. Los elementos iguales al pivote pueden ser colocados tanto a su derecha como a su izquierda, dependiendo de la implementacin deseada. En este momento, el pivote ocupa exactamente el lugar que le corresponder en la lista ordenada. 3. La lista queda separada en dos sublistas, una formada por los elementos a la izquierda del pivote, y otra por los elementos a su derecha. 4. Repetir este proceso de forma recursiva para cada sublista mientras stas contengan ms de un elemento. Una vez terminado este proceso todos los elementos estarn ordenados.

EJEMPLO:

Como se puede suponer, la eficiencia del algoritmo depende de la posicin en la que termine el pivote elegido.

ALGORITMO

El algoritmo de quicksort. Para ponerlo a prueba puedes utilizar este codigo en tu metodo Main, mandando a llamar el metodo quicksort de la clase y organizando un arreglo cualquiera.

int array[] ={3,7,3,4,12,6,3,7,4}; Ordenador a = new Ordenador(); [Link](array);

PROYECTO FINAL METODOS DE ORDENAMIENTO

5 DE DICIEMBRE DE 2012 12

El programa esta diseado para manejar datos de tipo int, por lo que solo acepta arreglos de numeros tipo entero.

Anlisis del algoritmo:

Estabilidad: No es estable. Requerimientos de Memoria: No requiere memoria adicional en su forma recursiva. En su forma iterativa la necesita para la pila.

Ventajas:

Muy rpido. No requiere memoria adicional. Desventajas:

Implementacin un poco ms complicada. Recursividad (utiliza muchos recursos).


Mucha diferencia entre el peor y el mejor caso.

COMPLEJIDAD

En este caso, el orden de complejidad del algoritmo es O(nlog n).

En el peor caso, el pivote termina en un extremo de la lista. El orden de complejidad del algoritmo es entonces de O(n). El peor caso depender de la implementacin del algoritmo, aunque habitualmente ocurre en listas que se encuentran ordenadas, o casi ordenadas. Pero principalmente depende del pivote, si por ejemplo el algoritmo implementado toma como pivote siempre el primer elemento del array, y el array que le pasamos est ordenado, siempre va a generar a su izquierda un array vaco, lo que es ineficiente.

PROYECTO FINAL METODOS DE ORDENAMIENTO

5 DE DICIEMBRE DE 2012 13

METODO MERGESORT,(ORDENAMIENTO POR INTERCALACIN).

La estrategia de este algoritmo se basa en el principio de divide y vencers:

a) Partir la lista por la mitad. b) Ordenar la sublista de la izquierda. c) Ordenar la sublista de la derecha. d) Mezclar las dos sublistas ordenadas en una sola lista ordenada. La fusin de vectores permite un mtodo de ordenacin rpida y potente conocido por el nombre de ordenacin por fusin (MergeSort).

La idea es dividir el vector en dos mitades, a continuacin ordenar cada mitad y despus mezclar ambas mitades para obtener un nuevo vector ordenado. El algoritmo admite una formulacin recursiva:

Dividir el vector en dos mitades Ordenar la mitad izquierda Ordenar la mitad derecha Mezclar las dos mitades juntas

ALGORITMO

Procedimiento MergeSort (A, Primero, Ultimo). A: arreglo lineal Primero: ndice al primer elemento Ultimo: ndice al ltimo elemento} Si A[Primero] < A[Ultimo] entonces

PROYECTO FINAL METODOS DE ORDENAMIENTO

5 DE DICIEMBRE DE 2012 14

Central = (Primero + Ultimo) / 2 MergeSort (A, Primero, Central) MergeSort (A, Central + 1, Ultimo) Mezcla A [Primero central ] con A[ central+1Ultimo] Fin Si

Donde los parmetros del algoritmo Mezcla han sido modificados convenientemente. EJEMPLO:

PROYECTO FINAL METODOS DE ORDENAMIENTO

5 DE DICIEMBRE DE 2012 15

METODO RADIX SORT

Radix sort es uno de los algoritmos de clasificacin para lineales enteros. Funciona mediante la clasificacin de los nmeros de entrada de cada dgito, para cada uno de los dgitos de los nmeros. Sin embargo, el proceso adoptado por este mtodo de ordenacin es poco intuitivo, en el sentido de que los nmeros se ordenan en el dgito menos significativo primero, seguido por el segundo al menos dgitos significativos y as sucesivamente hasta que el dgito ms significativo. EJEMPLO

Supongamos que queremos ordenar una baraja de 52 cartas (los diversos juegos se pueden dar valores adecuados, por ejemplo, 1, 2 para los diamantes para Clubes, 3 y 4 de corazones para Spades) . El 'natural' cosa a hacer sera ordenar primero las tarjetas de acuerdo a los juegos, a continuacin, ordenar cada una de las cuatro pilas separadas, y finalmente combinar los cuatro en orden. Este enfoque, sin embargo, tiene una desventaja inherente. Cuando cada uno de los pilotes est siendo ordenados, las otras pilas tienen que ser mantenido a un lado y se mantiene la pista. Si, en cambio, seguimos el "contraintuitivo" aproach de la primera clasificacin de las tarjetas de valor, este problema se elimina. Despus de la primera etapa, las cuatro pilas separadas se combinan en el orden y a continuacin, por ejemplo. Si un algoritmo de ordenacin estable (es decir, uno que resuelve un lazo manteniendo el nmero obtenido en la primera entrada de la primera como en la salida), se puede ver fcilmente que corregir los resultados finales se obtienen. Como se ha mencionado, la clasificacin del producto de los nmeros de clasificar el menos significativo al dgito ms significativo. Para la clasificacin de cada uno de estos grupos de dgitos, un algoritmo de clasificacin estable se necesita. Tambin, los elementos de este grupo

PROYECTO FINAL METODOS DE ORDENAMIENTO

5 DE DICIEMBRE DE 2012 16

para ser ordenados estn en el intervalo fijo de 0 a 9. Ambas caractersticas punto hacia el uso de Counting Sort como el algoritmo de ordenacin de eleccin para la clasificacin de cada dgito (Si usted no ha ledo la descripcin en contar Ordenar hecho, por favor hgalo ahora).

ALGORITMO

RADIX-SORT(A,d) 1 for i - 1 to d utilice una ordenacin estable para ordenar el Array A en cifras i

COMPLEJIDAD

La complejidad temporal del algoritmo es el siguiente: Supongamos que los nmeros de entrada n tiene k dgitos como mximo. A continuacin, el procedimiento se llama Ordenar Contando con un total de k veces. Contando Ordenar es lineal, o O (n) algoritmo. As que todo el procedimiento Radix Ordenar toma O (kn) tiempo. Si los nmeros son de tamao finito, el algoritmo se ejecuta en O (n) tiempo asinttica.

Una representacin grfica de todo el procedimiento se ha proporcionado en el applet adjunto. Este programa tiene 8 enteros generados aleatoriamente 3 dgitos como entrada y los ordena utilizando Ordenar Radix.

También podría gustarte