Anda di halaman 1dari 20

Mtodo Burbuja Este mtodo consiste y permite ordenar de menor a mayor (o de menor a mayor) una serie de nmeros cualquiera.

El mtodo va comparando pares de nmeros. Ejemplo: arreglo original 8 6 paso 1 6 6 4 paso 2 4 4 4 paso 3 4 4 6 8 4 4 6 6 6 6 6 6 4 4 8 8 8 8 8 8 8 8 26 26 26 26 26 26 26 26 26 26 accin compara el 8 con 6 y los intercambia compara el 8 con 4 y los intercambia compara el 8 con 26 y no los intercambia compara el 4 con 6 y los intercambia compara el 6 con 8 y no los intercambia compara el 8 con 26 y no los intercambia compara el 4 con 6 y no los intercambia compara el 6 con 8 y no los intercambia compara el 8 con 26 y no los intercambia

Pseudo cdigo del mtodo burbuja 1.- inicio 2.- reservar espacio en la memoria 3.- Leer secuencia 4.- para (i=1,...,N-1) hacer 5.6.7.para (j=1,...,N-1) hacer comparar X[i] con X[i+1] y ordenar fin para

8.- fin para 9.- imprimir secuencia de nmeros ordenados 10.- fin 2 refinamiento 1.- inicio 2.- reservar espacio en la memoria 3.- Leer secuencia 4.- para (i=1,...,N-1) hacer 5.6.7.8.9.fin si fin para para (j=1,...,N-1) hacer si X[i] > X[i+1] entonces permutar X[i] con X[i+1]

10.- fin para 11.- imprimir secuencia de nmeros ordenados 12.- fin 3er refinamiento 1.- inicio 2.- reservar espacio en la memoria 3.- Leer secuencia 4.- para (i=1,...,N-1) hacer 5.6.7.8.9.para (j=1,...,N-1) hacer si X[i] > X[i+1] entonces AUX=X[i]; X[i]=X[i+1]; X[i+1]=AUX;

10.11.-

fin si fin para

12.- fin para 13.- imprimir secuencia de nmeros ordenados 14.- fin El mtodo burbuja es simple de implementar, pero es muy lento, por lo cual es slo adecuado para pequeos conjuntos de nmeros.

Mejor Burbuja O (n)

Medio O (n2)

Peor O (n2)

*O (n) *O (n 2 )

orden lineal orden cuadrtico

indica: lo normal indica: tratable

N de operaciones menor o igual a (N-1)(N-1)(1+3) (el 3 es por las 3 asignaciones para permutar) O sea N de operaciones menor o igual a 4(N-1)2 Por ejemplo, para ordenar 10 nmeros: N de operaciones menor igual que 4 x 92 = 324 Si poseemos un PC que trabaje a 400MHz, ==> 1 operacin = 1/(4 x 108) segundos Por lo tanto, para ejcutar las 324 operaciones necesitamos: 324/(4 x 108) segundos = 8.1 x 10-7 segundos Otro ejemplo, para ordenar 1000 nmeros: N de operaciones menor igual que 4 x 9992 = 3992004 Si utilizamos el mismo PC:

3992004/(4 x 108) segundos = 9.98 x 10-3 segundos

Este mtodo consiste y permite ordenar de menor a mayor (o de menor a mayor) una serie de nmeros cualquiera. El mtodo va comparando pares de nmeros. El mtodo tiene una complejidad que va de lo normal a lo tratable, es decir, tiene un buen desempeo.

Algoritmo quick sort

El algoritmo quick sort es quiz el ms eficiente de los algoritmos de ordenamiento, debido a que su complejidad es mnima y por lo tanto su tiempo de ejecucin tambin es mnimo. La idea central de este algoritmo es la siguiente: Todos los elementos de una sublista deben ser menores que un elemento llamado pivote. Todos los elementos en la otra sublista deben ser mayores que el pivote. Si se toma un conjunto de elementos desordenados y se ubica uno cualquiera de ellos llamado pivote- en una posicinn tal que todos los que estn antes sean menores o iguales y todos los que estn despus sean mayores, entonces esa posicin particular sera la correcta para ese elemento si el conjunto estuviera ordenado. Asimismo se verifica que el conjunto ha quedado dividido en dos partes: en la primera estn todos los elementos menores o iguales al pivote y en la segunda todos los mayores. Esto permite aplicar recursivamente el mismo procedimiento en ambas partes del conjunto hasta que ste quede completamente ordenado. La tarea de dividir el conjunto de datos en dos grupos en torno al pivote es accesoria y puede ser realizada por una funcin auxiliar. Esta funcin auxiliar se puede implementar de varias maneras, pero todas ellas deben informar de algn modo en qu posicin ha quedado ubicado el pivote.

ANLISIS DE COMPLEJIDAD PARA QUICK SORT

Mejor Quick sort O (n log n)

Medio O (n log n)

Peor O (n2)

*O (n log n) orden n logartmico *O (n 2 ) orden cuadrtico

indica: esta bien indica: tratable

El algoritmo quicksort es quiz el ms eficiente de los algoritmos de ordenamiento, debido a que su complejidad es mnima y por lo tanto su tiempo de ejecucin tambin es mnimo. La idea central de este algoritmo es la siguiente: Todos los elementos de una sublista deben ser menores que un elemento llamado pivote. Todos los elementos en la otra sublista deben ser mayores que el pivote.

Algoritmo Par e Impar

Lo siento pero: De este algoritmo lo nico que he podido conseguir es el programa hecho en pascal, que se presenta a continuacin.

Mtodo de ordenacin por insercin binaria

ORDENAMIENTO POR INSERCION BINARIA.

Como se dijo, el mtodo de ordenamiento por insercin binaria es una mejora del ordenamiento por insercin directa. Para lograr esta mejora se recurre a una bsqueda binaria en lugar de una bsqueda secuencial para insertar un elemento en la parte izquierda del arreglo, que ya se encuentra ordenado. El resto del procedimiento es similar al de insercin directa, es decir, se repite este mismo procedimiento desde el segundo trmino hasta el ltimo elemento.Veamos el algoritmo:

Algoritmo del mtodo

INSERCIONBINARIA (A, N) { para (i=2 hasta N) { aux = A[i]; izq=1; der=i-1; mientras (izq<=der) { m=[parte entera ((izq+der)/2)]; si (aux<A[m]) { der=m-1; } si no { izq=m+1; } } j=i-1; mientras (j>=izq) { A[j+1]=A[j]; j=j-11; } A[izq]=auz; }

ANLISIS DE COMPLEJIDAD PARA INSERCIN BINARIA

Mejor Insercin binaria O (n)

Medio O (n)

Peor O (n2)

*O (n) *O (n 2 )

orden lineal orden cuadrtico

indica: lo normal indica: tratable

El mtodo de ordenamiento por insercin binaria es una mejora del ordenamiento por insercin directa. Para lograr esta mejora se recurre a una bsqueda binaria en lugar de una bsqueda secuencial para insertar un elemento en la parte izquierda del arreglo, que ya se encuentra ordenado.

Mtodo SHELL

El mtodo Shell (en honor a su descubridor D.L. Shell) mejora del mtodo de insercin simple ordenando subarrreglos del arreglo original en forma separada. Para crear estos nuevos subarreglos, se toman elementos saltados del arreglo original en relacin a incrementos predeterminados.

Acerca de su complejidad

El nmero de comparaciones en el i-simo paso es como mximo k-1 y como mnimo 1. por consiguiente, la media proporciona el nmero de comparaciones: [(k-1) + 1]/2 = k/2 Se recomienda utilizar secuencias de incrementos, donde ellos sean nmeros primos relativos, es decir, que no tengan divisores comunes entre ellos distintos del 1.

Ejemplo:

Suponiendo un arreglo X, y tomando un incremento (salto) igual a 5, se generaran los siguientes subarreglos: Subarreglo 1: X[0] X[5] X[10] ... Subarreglo 2: X[1] X[6] X[11] ... Subarreglo 3: X[2] X[7] X[12] ... Subarreglo 4: X[3] X[8] X[13] ... etc. Con un salto igual a 3 se obtendran: Subarreglo 1: X[0] X[3] X[6] ... Subarreglo 2: X[1] X[4] X[7] ... Subarreglo 3: X[2] X[5] X[8] ... Subarreglo 4: X[3] X[6] X[9] ... etc. Lo habitual es tomar un valor de incremento, y ordenar mediante insercin los subarreglos obtenidos. Luego se toma otro valor de incremento, y se ordenan ahora los asubarreglos generados a partir de este incremento. Y as sucesivamente para diferentes valores de incremento o salto. Supongamos que tenemos el siguienmte arreglo: 25 57 48 37 12 92 86 33 y que se elige la secuencia de incrementos (5,3,1), los archivos a ordenar para esta secuencia seran: con incremento = 5: (x[0], x[5]) (x[1], x[6]) (x[2], x[7])

(x[3]) (x[4]) con incremento = 3: (x[0], x[3], x[6]) (x[1], x[4], x[7]) (x[2], x[5]) con incremento = 1: (x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7])

A continuacin se muestra el resultado del ordenamiento Shell sobre este arreglo. Las lneas indican los subarreglos que se procesan por separado. Arreglo original paso 1 salto = 5 o 25 57 48 37 12 92 86 33 o 25 57 48 37 12 92 86 33

paso 2 salto = 3

25 57 33 37 12 92 86 48

paso 3 salto = 1

25 12 33 37 48 92 86 57

Arreglo ordenado

25 12 33 37 48 57 86 92

Habitualmente lo que se hace es generar un arreglo que contenga los incrementos. Suponiendo que se tiene un arreglo con los incrementos, a continuacin se muestra un ejemplo del mtodo Shell en el siguiente fragmento de cdigo en C: . . . int X[n]; /* ser el nmero de elementos del arreglo */ int i,j,K /* K ser el elemento que se inserte para mantener el orden */ int incre[numinc]; /* incre contiene la secuencia de incrementos, y numinc es el nmero total de incrementos */ int salto, numi; . . . for (numi=0;numi<numinc;numi++) { salto = incre[numi]; /* salto es el incremento actual */ for (j=salto;j<n;j++) { K=X[j]; for(i=j-salto;i>=0&&K<X[i];i-=salto) { X[i+salto]=X[i]; X[i]=K;

} } } . . . Se recomienda utilizar secuencias de incrementos, donde ellos sean nmeros primos relativos, es decir, que no tengan divisores comunes entre ellos distintos del 1. Conclusiones

El mtodo Shell (en honor a su descubridor D.L. Shell) mejora del mtodo de insercin simple ordenando subarrreglos del arreglo original en forma separada. Para crear estos nuevos subarreglos, se toman elementos saltados del arreglo original en relacin a incrementos predeterminados.

METODO HEAP SORT

El mtodo de ordenamiento heap sort es tambin conocido con el nombre de montculo y es el mtodo ms eficiente de ordenamiento de los que trabajan con rboles. METODO HEAPSORT La idea central de este algoritmo consiste en: 1. 2. Construir un montculo. Eliminar la raz del montculo en forma repetida.

Montculo: "Para todo rbol se debe cumplir que su valor, sea mayor o igual que el valor de cualquiera de sus hijos".

Bueno, ahora para representar un montculo en un arreglo lineal debe tenerse en cuenta lo siguiente para todo nodo 'K': 1. El nod o 'K' se almacena en la posicin 'K' correspondiente. 2. El hijo izquierdo del nodo 'K' se almacena en la posicin '2K'. 3. El hijo derecho del nodo 'K' se almacena en la posicin '2K+1'. Pero bueno, lo importante aqu es que seamos breves, asi que veamos con un ejemplo como se ordena. Supongamos el siguiente arreglo: 67 56 60 44 21 28 36 15 35 16 13 08 27 12 07 10 llamaremos a la raiz al primer trmino, entonces procedemos a intercambiar la raz con el elemento que ocupa la ltima posicin. Las comparaciones que se realizan seran las siguientes: A[1]<A[3] (10<60) entonces hay intercambio (se compara con A[3] por que este es el mayor de los hijos de A[1]. A[3]<A[7] (10<36) entonces si hay intercambio (A[7] es el mayor de los hijos de A[3]

A[7]<A[14] (10<12) entonces hay intercambio (A[14]es el mayor de los hijos de A[7]) Luego de eliminar la primera raz, el montculo queda ordenado de la siguiente forma: 60 56 36 44 21 28 12 15 35 16 13 08 27 10 07 67 Observa que el elemento ms grande fu situado en la ltima posicin del arreglo. Ahora el montculo ir desde A[1] hasta A[15] (desde el 60 hasta el 07) y se procede a realizar el procedimiento anterior: A[1]<A[2] A[2]<A[4] A[4]<A[9] (07<56) (07<44) (07<35) entonces hay intercambio. entonces hay intercambio. entonces hay intercambio.

Luego de eliminar la segunda raz, el montculo quedara de la siguiente forma: 56 44 36 35 21 28 12 15 07 16 113 08 27 10 60 67 Observese que nuevamente el trmino ms grande qued ubicado en la parte final del montculo. Pues bueno, esta es la forma de ordenarlo, se realiza este mismo procedimiento hasta que el montculo quede de un solo trmino. En este caso ya estar ordenado y terminara el ciclo. Veamos que es lo que hace el algoritmo: ELIMINACION 3 4 5 6 7 8 9 10 11 12 13 14 15 44 36 35 28 27 21 16 15 13 12 10 08 07 35 35 21 21 21 16 15 12 12 10 08 07 08 MONTICULO 36 28 28 27 13 13 13 13 08 08 07 10 10 15 15 15 15 15 15 10 10 10 07 12 12 12 21 21 16 16 16 07 07 07 07 13 13 13 13 28 27 27 27 08 08 08 08 15 15 15 15 15 12 12 12 12 12 12 12 16 16 16 16 16 16 10 07 16 13 08 27 56 60 67 10 07 16 13 08 44 56 60 67 10 07 08 13 36 44 56 60 67 10 07 08 35 36 44 56 60 67 10 07 28 35 36 44 56 60 67 10 27 28 35 36 44 56 60 67 21 27 28 35 36 44 56 60 67 21 27 28 35 36 44 56 60 67 21 27 28 35 36 44 56 60 67 21 27 28 35 36 44 56 60 67 21 27 28 35 36 44 56 60 67 21 27 28 35 36 44 56 60 67 21 27 28 35 36 44 56 60 67

Si observas, al eliminarse repetidamente la raz del montculo, el arreglo qued ordenado.

ANLISIS DE COMPLEJIDAD PARA HEAPSORT

La adicin y eliminacin consta de O(logn) operaciones. Necesitamos para realizar n adiciones y eliminaciones, dejar un algoritmo de complejidad O(n log n).

ALGORITMO.

Primero debemos construir el montculo insertndole los elementos. Este montculo lo representaremos como arreglo. A es un arreglo de N elementos. funcin insertamonticulo(A,N) {I,K y AUX son variables de tipo entero. BAND es una variable de tipo booleano} { para i=2 hasta N { k=I y BAND=verdadero; mientras (K>1) y (BAND=verdadero) { BAND=falso; si (A[K]>A[parte entera(K/2)]) { AUX=A[parte entera(K/2)]; A[parte entera(K/2)]=A[K]; A[K]=AUX; K=parte entera(K/2); BAND=verdadero; } } } }

/* una vez creado el montculo, se procede a la eliminacin de la raz en forma repetida. */ funcion eliminamonticulo (A,N) { int I, AUX, IZQ, DER, K, AP;

para (I=N hasta 2 I--) { AUX=A[I]; A[I]=A[1]; IZQ=2; DER=3; K=1; mientras (IZQ<I) { MAYOR=A[IZQ]; AP=IZQ; si ((MAYOR<A[DER]) y (DER=!1)) { MAYOR=A[DER]; AP=DER; } si (AUX<MAYOR) { A[K]=A[AP]; } K=AP; IZQ=K*2; DER=IZQ+1; } A[K]=AUX; } }

En general, este mtodo consta de dos partes fundamentales: 1. Construir el montculo. 2. Eliminar repetidamente la raz del montculo.

Conclusiones:

La adicin y eliminacin consta de O(logn) operaciones. Necesitamos para realizar n adiciones y eliminaciones, dejar un algoritmo de complejidad O(n log n).

El mtodo de ordenamiento heapsort es tambin conocido con el nombre de montculo y es el mtodo ms eficiente de ordenamiento de los que trabajan con rboles.

Mtodo Merge Sort

Ordenacin por mezcla de listas Este esquema considera el proceso de combinar dos sublistas ordenadas en una tercer lista que conserva el orden. Inicialmente en la lista se consideran sublistas son atmicas (de un elemento) y por tanto estn ordenadas. Se mezclan y forman varias sublistas de dos elementos que continan el proceso hasta formar la lista completa ya ordenada. Ejemplo: Ordenar la lista:33, 13, 46, 62, 35, 24, 14, 68, 20, 46, 93, 04, 48 lista original dividida en sublistas atmicas [33][13] [46][62] [35][24] [14][68] [20][46] [93][04] [48] Despus del 1er. paso [13,33] [46,62] [24,35] [14,68] [20,46] [04,93] [48] Despus del 2do. paso [13, 33, 46, 62] [14, 24, 35, 68] [04, 20, 46, 93] [48] Despus del 3er. paso [13, 14, 24, 33, 35, 46, 62, 68] [04, 20, 46, 48, 93] Despus del 4to. paso [04, 13, 14, 20, 24, 33, 35, 46, 46, 48, 62, 68, 93]

ANLISIS DE COMPLEJIDAD PARA MERGE SORT

Merge R=Q(m) Realiza una vuelta con una relacin logRn / m = log * mn-1 pasos. Tiene una complejidad de O(n log n) , lo que tambin significa el nmero de iteraciones estimadas para el mtodo.

El mtodo Merge Sort combina un par de secuencias ordenadas en otra nueva secuncia ordenada, mezcla de las dos originales. Las secuencias originales deben estar ordenadas. Tiene una complejidad de O(n log n) , lo que tambin significa el nmero de iteraciones estimadas para el mtodo.

Mtodo Base Radix (Radix Sort)

Este algoritmo est basado en los valores reales de los dgitos de acuerdo a la posicin que ocupan los nmeros que son ordenados. Para cada dgito de las cifras a ordenar se efectan los siguientes pasos, comenzando con el dgito menos significativo y terminando con el dgito ms significativo. Se toma cada nmero en el orden original y se coloca en una de las 10 colas dependiendo del valor del dgito que se est procesando, despus comenzando con la cola de los nmeros con dgitos 0 y terminando con los de dgito 9 se regresan al arreglo original. Cuando se efecta este proceso para cada dgito al arreglo est ordenado. M es el nmero de dgitos que forman las cifras a ordenar.

CONDICIONES PARA APLICAR RADIX SORT

Se debe cumplir que los nmeros se encuentren dentro del rango (0 , n2).

Esto quiere decir que si tenemos como n (el total de nmeros a ordenar) igual a 10, entonces es necesario que el mayor de los nmeros a ordenar sea como mximo 100.

Este algoritmo est basado en los valores reales de los dgitos de acuerdo a la posicin que ocupan los nmeros que son ordenados. Para cada dgito de las cifras a ordenar se efectan los siguientes pasos, comenzando con el dgito menos significativo y terminando con el dgito ms significativo. Se debe cumplir que los nmeros se encuentren dentro del rango (0 , n2).

Ordenamiento Shaker Sort (Embudo o Sacudida)

EL METODO DEL EMBUDO: En este algoritmo cada pasada tiene dos etapas. En la primera etapa (Que se efectua de derecha a izquierda) se trasladan los elementos ms pequeos hacia la parte izquierda del arreglo, almacenando en una variable la posicin del ltimo elemento intercambiado. En la segunda pasada (Que se efecta de izquierda a derecha) se trasladan los elementos ms grandes hacia la parte derecha del arreglo, almacenando en otra variable la posicin del ltimo elemento intercambiado. Luego se siguen efectuando nuevos barridos comprendidos entre las posiciones almacenadas en las variables. El algoritmo termina cuando en una etapa no se producen intercambios o bien cuando el contenido de la variable que almacena el extremo izquierdo del arreglo es mayor que el contenido de la variable que almacena el extremo derecho.

Algoritmo

Embudo (A,N) { izq=2;

der=N; k=N; Repita { para (i = der hasta izq) { si (A[i-1]>A[i]) { aux=A[i-1]; A[i-1]=A[i]; A[i]=aux; k=1; } } izq=k+1; para (i = izq hasta der) { si (A[i-1]>A[i]) { aux=A[i-1]; A[i-1]=A[i]; A[i]=aux; k=1; } } der=k-1; } hasta que (izq>der) }

El mtodo shaker sort, conocido tambin como 'mtodo del embudo o de la sacudida' es una optimizacin del mtodo burbuja. Este algoritmo combina las dos formas ms conocidas del mtodo burbuja.

Mtodo de la burbuja
El siguiente pseudocdigo describe el mtodo de ordenacin conocido como la burbuja:

procedure burbuja; var i, j : indice; x: item; begin for i = 2 to n do begin for j = n downto i do if (a[j-1].clave > a[j].clave) then begin x = a[j-1]; a[j-1] = a[j]; a[j] = x; end end end

El mtodo quicksort
El quicksort es un mtodo de ordenacin basado en intercambios, que aplica que los intercambios sobre distancias largas son los ms efectivos. El pseudocdigo del algoritmo es el siguiente:
procedure quicksort(iz, de: indice); var i, j : indice; x, w: item; begin i = iz; j = de; x = a[(iz + de) div 2]; repeat while (a[i].clave < x.clave) do i = i + 1; while (x.clave < a[j].clave) do j = j - 1; if (i <= j) then begin w = a[i]; a[i] = a[j]; a[j] = w; i = i + 1; j = j - 1; end until i > j; if iz < j then quicksort(iz, j); if i < de then quicksort(i, de); end;

Los algoritmos de ordenacin descritos se han tomado del libro ``Algoritmos + Estructuras de Datos = Programas" de Niklaus Wirth.

Anda mungkin juga menyukai