P. 1
Algoritmos de inserción

Algoritmos de inserción

|Views: 22|Likes:
Publicado porelizhabetth

More info:

Published by: elizhabetth on Jun 15, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOCX, PDF, TXT or read online from Scribd
See more
See less

06/15/2011

pdf

text

original

Algoritmos de inserción

:
En este tipo de algoritmo los elementos que van a ser ordenados son considerados uno a la vez. Cada elemento es INSERTADO en la posición apropiada con respecto al resto de los elementos ya ordenados. Entre estos algoritmos se encuentran el de INSERCION DIRECTA, SHELL SORT, INSERCION BINARIA y HASHING.

METODO DE INSERCIÓN.
Este método toma cada elemento del arreglo para ser ordenado y lo compara con los que se encuentran en posiciones anteriores a la de él dentro del arreglo. Si resulta que el elemento con el que se está comparando es mayor que el elemento a ordenar, se recorre hacia la siguiente posición superior. Si por el contrario, resulta que el elemento con el que se está comparando es menor que el elemento a ordenar, se detiene el proceso de comparación pues se encontró que el elemento ya está ordenado y se coloca en su posición (que es la siguiente a la del último número con el que se comparó).

Procedimiento Insertion Sort
Este procedimiento recibe el arreglo de datos a ordenar a[] y altera las posiciones de sus elementos hasta dejarlos ordenados de menor a mayor. N representa el número de elementos que contiene a[]. paso 1: [Para cada pos. del arreglo] For i <- 2 to N do paso 2: [Inicializa v y j] v <- a[i] j <- i. paso 3: [Compara v con los anteriores] While a[j-1] > v AND j>1 do paso 4: [Recorre los datos mayores] Set a[j] <- a[j-1], paso 5: [Decrementa j] set j <- j-1. paso 5: [Inserta v en su posición] Set a[j] <- v. paso 6: [Fin] End. Ejemplo: Si el arreglo a ordenar es a = ['a','s','o','r','t','i','n','g','e','x','a','m','p','l','e'], el algoritmo va a recorrer el arreglo de izquierda a derecha. Primero toma el segundo dato 's' y lo asigna a v y i toma el valor de la posición actual de v. Luego compara esta 's' con lo que hay en la posición j-1, es decir, con 'a'. Debido a que 's' no es menor que 'a' no sucede nada y avanza i. Ahora v toma el valor 'o' y lo compara con 's', como es menor recorre a la 's' a la posición de la 'o'; decrementa j, la cual ahora tiene la posición en dónde estaba la 's'; compara a 'o' con a[j-1] , es decir, con 'a'. Como no es menor que la 'a' sale del for y pone la 'o' en la posición a[j]. El resultado hasta este punto es el arreglo siguiente: a = ['a','o','s','r',....]

'n'. 35 6ª pasada 08. 27. 16. INSERCION (A. 67. 35 1ª pasada 08. 08. 12.Así se continúa y el resultado final es el arreglo ordenado : a = ['a'.1} c. 15. 27. 16.. 67. {fin del condicional del paso1} Prueba de escritorio: Si A= 15. 15. 27. Este proceso se repite desde el segundo hasta el n-esimo elemento.. El número máximo de comparaciones y movimientos se produce cuando los elementos del arreglo están en orden inverso Cmax = 1+2+3+.'m'. nos queda: Cmed = (n2+n-2)/4 Respecto al número de movimientos Knuth obtiene los siguiente: Mmin = 0 . 15.'x'] ORDENACION POR INSERCION DIRECTA Supóngase que se desea ordenar los siguientes claves del arreglo A utilizando el método de inserción directa el cual consiste en insertar un elemento del arreglo en la parte izquierda del mismo que ya se encuentra ordenada. 12. 16. Repetir mientras(aux < [k]) y (k > 1) . 67. 44.'l'. 44. Ejemplo 1: A= 15.3} 2. 16. puede ser calculado mediante la suma de las comparaciones mínimas y máximas divididas entre 2. 16. 12. Hacer A[k+1]<. Si a[k]<=aux Entonces: Hacer A[k+1]<-aux Si no Hacer A[k+1]<. 27. 67. 44.'e'. 27.. 35 Comparaciones realizadas: 1ª pasada A[2] < A[1] 67 < 15 No hay intercambio A= 15. 27. 15. 16.'r'. 12.. 12. 44. 08. 16. 35 7ª pasada 08. 27.'p'. 67. 44. 12. 15. 08.'t'. 67. 16. 44.'o'. 27. 12. 35. 44. 15..A[I] y k<. Cmed = [(n-1) + (n2-n)/2]/2 Al hacer la operación. 44. A[k]<-A[k] d. 27.A[k] y k<-. 35 2ª pasada A[3] < A[2] 08 < 67 Si hay intercambio A= 15. 12. 35 3ª pasada A[4] < A[3] 08 < 15 Si hay intercambio A= 08.N) Insercion(A. 16.A[k]. 08. 44..'i'... { fin del condicional del paso 1. 35 2ª pasada 08. 15.. 35 5ª pasada 08.'g'.Repetir con I desde 2 hasta N Hacer aux<. 67.. 35 4ª pasada 08. 27..'a'. 16. 15. 67. 67.k-1 b.. 35 3ª pasada 08. 12.+(n-1) = n*(n-1)/2 Cmax= (n2-n)/2 El número de comparaciones promedio que es cuando los elementos aparecen en el arreglo en forma aleatoria. 27. 67 ANALISIS DE EFICIENCIA DEL METODO DE INSERCION DIRECTA En general afirmar que si el arreglo se encuentra ordenado se efectúan como máximo n-1 comparaciones y o movimientos entre elementos Cmin = n-1.. 35 Y así sucesivamente. 12. 44. 12.'e'. 67.N) {El algoritmo ordena los elementos del arreglo utlizando el método de inserción directa A es un arreglo de N elementos} {I.I-1 a. aux y k son variables de tipo entero} 1. 44.'s'. 12. 67. 27. {fin del ciclo del paso 1. 44. 16. 16..

j: 0..A[j] (* desplazamos hacia la izquierda *) j <-.n] de T Salida A Variables x: T i.j-1 (* pasamos a otro elemento *) fin_mientras A[j+1] <-.x (* asignamos x al centinela *) j <-.Mmed = (n2-n)/4 Mmax = (n2-n)/2 El tiempo necesario para ejecutar el algoritmo es proporcionar a n2.i-1 (* empezar a comparar por el anterior *) mientras x < A[j] hacer A[j+1] <-.A[i] A[0] <-. el método de inserción directa se comporta mejor que el método de intercambio directo analizado anteriormente. O(n2).2 hasta i <-.n hacer x <-.x fin_desde fin .n Inicio desde i <-.. Ejemplo 2: Entrada A: array [0. A pesar de ser un método ineficiente y recomendable solo cuando n es pequeña.

ejemplo 2: 1. if( izq < j ) quicksort( A.n. i = izq. do{ cout<>n. j ). void quicksort(int A[].h´ using namespace std. j = der. }while(nlargo). i. do{ while( (A[i] < x) && (j <= der) ) { i++. aux. j. } while( (x izq) ) { j±. int der ) { int i. A[j] = aux. . izq. x . der ). j±. } }while( i <= j ). if(nlargo) cout< a 0 y < a ³<<largo<<endl. } if( i <= j ) { aux = A[i]. x = A[ (izq + der) /2 ].int izq. i++. if( i < der ) quicksort( A. A[i] = A[j]. //Quick Sort #include #define largo 100 #include´leearreglo. } void main () { int A[largo].

A). muestraCadena(n. } .leeCadena(n.n-1).0. quicksort(A.A).

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->