La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Unidad 6 Métodos de Ordenamiento Internos Ingeniería en Sistemas Computacionales Estructura de Datos.

Presentaciones similares


Presentación del tema: "Unidad 6 Métodos de Ordenamiento Internos Ingeniería en Sistemas Computacionales Estructura de Datos."— Transcripción de la presentación:

1 Unidad 6 Métodos de Ordenamiento Internos Ingeniería en Sistemas Computacionales Estructura de Datos

2 6. Ordenación interna 6.1. Algoritmos de ordenamiento por intercambio 6.1.1. Burbuja 6.1.2. Quicksort 6.1.3. Shellsort 6.2. Algoritmos de ordenamiento por distribución 6.2.1. Radix

3 Inserción directa Este método consiste en buscar el lugar adecuado para cada registro recorriendo los registros anteriores para dejar un lugar vacío para el nuevo elemento. El proceso de acomodo de cada elemento se repite hasta llegar al último elemento, los elementos previos al elemento a acomodar se encuentran en orden. Este es el método usado por los jugadores de cartas para acomodar su juego.

4 Ordenamiento por inserción directa Variables –K arreglo de datos a ordenar –V variable auxiliar –i, j índices para el arreglo –N número de elementos InserciónDirecta Inicio Para i=2 hasta N incremento 1 v = K(i) //elemento a acomodar j = i Mientras (j > 1) y (K(j-1) > v) K(j) = K(j-1) //mueve elementos j = j-1 K(j) = v // inserta el elemento actual Fin 38214 1 2 3 4 5 6 2 K 38 238 1238 12348 122348

5 Burbuja (Bubble) Este método realiza comparaciones de todas las posibles parejas de llaves intercambiando aquellas que se encuentran fuera de orden. Utiliza un proceso repetitivo comparando las parejas de datos adyacentes del inicio al final del arreglo donde, después de la primer pasada la llave mayor queda en la última posición del arreglo.

6 Burbuja (Bubble) Variables n es el total de elementos K arreglo de llaves t variable auxiliar para el intercambio i,j variables para los indices Burbuja Inicio para i= n-1 ; i>0 ; i-- para j=0; i>j; j++ si (k[j] > k[j+1]) t = k[j]; k[j]= k[j+1]; k[j+1] = t; Fin 38214 0 1 2 3 4 5 2 K 382142328142321842321482321428 Primera pasada

7 321428 231428 213428 213428 213248 Segunda pasada 213248 123248 123248 122348 Tercer pasada 122348 122348 122348 Cuarta pasada 122348 122348 Quinta pasada

8 Shell sort El método shell divide el arreglo a ordenar en varios grupos haciendo comparaciones e intercambios entre ellos. El tamaño de los subgrupos se decrementa y el número de subgrupos se incrementa hasta llegar a tener n grupos de tamaño 1. A partir de este punto, el método funciona como el de inserción directa. El tamaño de los subgrupos así como el total de estos puede determinarlos el usuario para hacer mas eficiente el algoritmo.

9 Shell sort Variables –K arreglo de datos a ordenar –H tamaño del grupo –i, j índices para el arreglo –V variable auxiliar –N número de elementos –grupo arreglo con los tamaños de grupo Shellsort Inicio grupo = [ 21, 7, 3, 1] para g=0; g<4; g++ h=grupo[g]; para i=h; i=h && a[j-h]>v) k[j]=k[j-h]; j=j-h; k[j]=v; Fin 3 7 9 0 5 1 6 8 4 2 0 6 1 5 7 3 4 9 8 2 3 7 9 0 5 1 68 4 2 0 6 1 57 3 4 9 8 2 3 3 2 0 5 1 57 4 4 0 6 1 68 7 9 9 8 2 3 3 23 3 25 7 45 7 41 6 81 6 80 5 10 5 14 0 64 0 67 9 97 9 98 2 0 0 10 0 13 3 43 3 45 6 81 2 21 2 24 5 64 5 67 7 97 7 98 98 9 0 0 1 1 2 2 3 3 4 4 5 6 5 6 8 7 7 9 8 9 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9

10 Radix Radix Sort (ordenamiento Radix) es un algoritmo de ordenamiento estable* para ordenar elementos identificados por llaves (o claves) únicas. Cada llave debe ser una cadena o un número capaz de ser ordenada alfanuméricamente. Este método ejecuta un número de repeticiones igual al número de caracteres de las llaves a ordenar. El Radix Directo, inicia con el dígito más a la derecha repartiendo los datos en canastas, estos datos se reparten de nuevo de acuerdo al siguiente dígito y así sucesivamente hasta terminar con el dígito de mas a la izquierda.

11 329248123423226825132335231432256218 Distribución y reacomodo Digito derecho 329248123 423 226825132 335 231 432256218 231132432123423825335226256248218329 231 132 432 123 423 825 335226 256248218 329 218123423825226329231132432335248256 Distribución y reacomodo Digito central

12 231 132432 123423825 335226 256 248 218 329 218123423825226329231132432335248256 Distribución y reacomodo Digito izquierdo 123132218226231248256329335423432825

13 Ejemplo

14 Algoritmo: Quicksort Profesora: Dra. Maria Lucia Barrón Estrada Alumno: Guillermo Alberto Sandoval Sánchez

15 Descripción Se elige un pivote. Se reubican los elementos respecto al pivote los menores antes, los mayores atrás. El arreglo queda separado en dos subarreglos Se repite el proceso con los subarreglos resultantes El arreglo esta ordenado

16 Pseudo-código quicksort(q) variables arreglos menores, arrPivotes, mayores si la longitud de q es menor o igual que 1 devolver q sino seleccionar un pivote de q para cada elemento en q excepto el pivote si el elemento < pivote entonces agregarlo al arreglo menores si el elemento pivote entones agregarlo al arreglo mayores agregar el pivote al arrPivotes devolver unir(quicksort(menores), arrPivotes, quicksort(mayores))

17 Ejecución por pasos 4 - 8 - 1 - 7 - 2 - 3 - 5 3 - 8 - 1 - 7 - 2 - 4 - 5 3 - 4 - 1 - 7 - 2 - 8 - 5 3 - 4 - 1 - 2 - 7 - 8 - 5 3 - 4 - 1 - 2 - 5 - 8 - 7 3 - 4 - 1 - 2 1 - 4 - 3 - 2 1 - 2 - 3 - 4 8 - 7 7 - 8 1 - 2 - 3 - 4 - 5 - 7 - 8

18 Implementación en Java import java.util.Comparator; import java.util.Random; public class Quicksort { public static final Random RND = new Random(); private void swap(Object[] array, int i, int j) { Object tmp = array[i]; array[i] = array[j]; array[j] = tmp; } private int partition(Object[] array, int begin, int end, Comparator cmp) { int index = begin + RND.nextInt(end - begin + 1); Object pivot = array[index]; swap(array, index, end); for (int i = index = begin; i < end; ++ i) { if (cmp.compare(array[i], pivot) <= 0) { swap(array, index++, i); } swap(array, index, end); return (index); } private void qsort(Object[] array, int begin, int end, Comparator cmp){ if (end > begin) { int index = partition(array, begin, end, cmp); qsort(array, begin, index - 1, cmp); qsort(array, index + 1, end, cmp); } public void sort(Object[] array, Comparator cmp){ qsort(array, 0, array.length - 1, cmp); }

19 Ordenamiento por conteo Este método utiliza un arreglo auxiliar para contabilizar el numero de llaves que son mayores que la llave actual. El arreglo de contadores, especifica la posición final donde debería estar cada elemento.

20 Ordenamiento por conteo Variables –K arreglo de datos a ordenar –Cont arreglo de contadores –N número de elementos a ordenar ComparacionPorConteo Inicio inicializar el arreglo de contadores con cero en todas sus posiciones Para i=N hasta 2 decremento 1 Para j=i-1 hasta 1 decremento 1 si K(i) < K(j) Cont(j)++ sino Cont(i)++ Fin

21 Ejemplo 23111987 1 2 3 4 5 00000 K Cont 11110 22210 32310 42310 Inicial Primera pasada Segunda pasada Tercera pasada Cuarta pasada

22 Ordenamiento por distribución Este método es bueno aplicarlo cuando existen muchas claves repetidas y estas se encuentran en un rango pequeño entre u y v. Rango u<=K 1..n <=v Utiliza un arreglo contador con posiciones desde u hasta v, además de un arreglo para generar la salida.

23 Ordenamiento por distribución Variables –K arreglo de datos a ordenar –Cont arreglo de contadores con índices desde u hasta v –S arreglo de salida –N número de elementos a ordenar –U llave menor –V llave mayor Distribución Inicio inicializar el arreglo de contadores con cero en todas sus posiciones Para i=1 hasta N incremento 1 Cont(K(i))++ // cuenta las llaves iguales Para j=u+1 hasta v incremento 1 Cont(j) = Cont(j) + Cont(j-1) // localiza la posición de cada llave Para j=N hasta 1 decremento 1 i = Cont(K(j)) S(i) = K(j) // envía la llave al vector de salida Cont(K(j)) = Cont(K(j)) - 1 Fin

24 Ejemplo 2931293429 1 2 3 4 5 Arreglo a ordenar K Arreglo de contadores Cont Arreglo de salida S 2934 Inicial Cuenta llaves repetidas Posición de cada llave Acomodo en la salida 00000 29 30 31 32 33 34 30100 33444 0 1 5 234444 1 2 3 4 5


Descargar ppt "Unidad 6 Métodos de Ordenamiento Internos Ingeniería en Sistemas Computacionales Estructura de Datos."

Presentaciones similares


Anuncios Google