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',....]

27. 16. 27. 44. 35. 67. 08. 12. 44. 35 1ª pasada 08. 16. 67.'p'. 44. 12. 27. 16.. 44. 12. 44. 35 2ª pasada A[3] < A[2] 08 < 67 Si hay intercambio A= 15. Cmed = [(n-1) + (n2-n)/2]/2 Al hacer la operación. 12. 35 6ª pasada 08..'e'.. 16.+(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.'s'. Ejemplo 1: A= 15.. 35 2ª pasada 08. 12. 16. 16. 16.'a'. 44.I-1 a. 15. 67. 67. 12.. 67. 15.'t'. 16. 27. 35 7ª pasada 08. 27. 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'.'n'. Este proceso se repite desde el segundo hasta el n-esimo elemento. 15. 35 Comparaciones realizadas: 1ª pasada A[2] < A[1] 67 < 15 No hay intercambio A= 15.. { fin del condicional del paso 1. {fin del ciclo del paso 1. 67. 27.. 27. 44. 08.3} 2.'e'. 12. 16. 15..N) {El algoritmo ordena los elementos del arreglo utlizando el método de inserción directa A es un arreglo de N elementos} {I.Así se continúa y el resultado final es el arreglo ordenado : a = ['a'. 27. 67.A[k].. 08. 67. 27.. 44. 12.'l'. Si a[k]<=aux Entonces: Hacer A[k+1]<-aux Si no Hacer A[k+1]<.'r'.Repetir con I desde 2 hasta N Hacer aux<. 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.'o'. 44. A[k]<-A[k] d. nos queda: Cmed = (n2+n-2)/4 Respecto al número de movimientos Knuth obtiene los siguiente: Mmin = 0 . 35 4ª pasada 08.. 08. 15.'g'. 44.. 16..1} c. 12. 44. Hacer A[k+1]<. INSERCION (A.A[k] y k<-. {fin del condicional del paso1} Prueba de escritorio: Si A= 15. 67. 27. Repetir mientras(aux < [k]) y (k > 1) . 15. 16. 16. 35 Y así sucesivamente. 12.. 15. aux y k son variables de tipo entero} 1. 35 3ª pasada 08. 27.N) Insercion(A. 12.'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. 35 5ª pasada 08.'i'. 35 3ª pasada A[4] < A[3] 08 < 15 Si hay intercambio A= 08.k-1 b. 67. 15. 67.A[I] y k<. 27. puede ser calculado mediante la suma de las comparaciones mínimas y máximas divididas entre 2. 12. 44.

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

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

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

Sign up to vote on this title
UsefulNot useful