Está en la página 1de 6

ORDENACIN POR INSERCIN DIRECTA Qu es ordenamiento?

Generalmente, se considera ordenar (clasificar) el proceso de reorganizacin de un conjunto dado de objetos en una secuencia especificada. El objetivo de este proceso es facilitar la bsqueda posterior de los elementos del conjunto ordenado. La bsqueda de informacin es una operacin bsica en el proceso de datos, de ah que por extensin, la ordenacin se convierta tambin en una actividad fundamental en dicho procesamiento de datos. El tema de la ordenacin es idneo para mostrar como los problemas se pueden resolver utilizando una gran variedad de algoritmos, todos con el mismo objetivo, pero cada uno presentando ciertas ventajas sobre los otros. Resulta un tema interesante para enfatizar la necesidad de analizar el funcionamiento de los algoritmos El ordenamiento se efecta con base en el valor de algn campo en un registro. El propsito principal de un ordenamiento es el de facilitar las bsquedas de los miembros del conjunto ordenado. Ej. de ordenamientos: Dir. telefnico, tablas de contenido, bibliotecas y diccionarios, etc. El ordenar un grupo de datos significa mover los datos o sus referencias para que queden en una secuencia tal que represente un orden, el cual puede ser numrico, alfabtico o incluso alfanumrico, ascendente o descendente. Normalmente, la funcin de ordenacin viene explcitamente reflejada en los objetos a ordenar como un campo de informacin mas sobre cada elemento. De manera que, en general, cada elemento del conjunto tendr ms de un campo de informacin (estructura de registro) y uno de esos campos indicar como se clasifican los elementos. El campo que especifica la relacin de orden recibe el nombre de clave. El problema de la clasificacin consiste entonces en ordenar una secuencia de registros de manera que sus claves formen una cadena no decreciente Cundo conviene usar un mtodo de ordenamiento? Cuando se requiere hacer una cantidad considerable de bsquedas y es importante el factor tiempo.

Tipos de ordenamientos: Los 2 tipos de ordenamientos que se pueden realizar son: los internos y los externos. Los internos: Son aquellos en los que los valores a ordenar estn en memoria principal, por lo que se asume que el tiempo que se requiere para acceder cualquier elemento sea el mismo (a[1], a[500], etc). Los externos: 1

Son aquellos en los que los valores a ordenar estn en memoria secundaria (disco, cinta, cilindro magntico, etc), por lo que se asume que el tiempo que se requiere para acceder a cualquier elemento depende de la ltima posicin accesada (posicin 1, posicin 500, etc). Eficiencia en tiempo de ejecucin: Una medida de eficiencia es: Contar el # de comparaciones (C) Contar el # de movimientos de items (M) Estos estn en funcin de el #(n) de items a ser ordenados. Un "buen algoritmo" de ordenamiento requiere de un orden nlogn comparaciones. La eficiencia de los algoritmos se mide por el nmero de comparaciones e intercambios que tienen que hacer, es decir, se toma n como el nmero de elementos que tiene el arreglo o vector a ordenar y se dice que un algoritmo realiza O(n2) comparaciones cuando compara n veces los n elementos, n x n = n2 Algoritmos de ordenamiento: Internos: Insercin directa. Insercin directa. Insercin binaria. Seleccin directa. Seleccin directa. Intercambio directo. Burbuja. Shake. Insercin disminucin incremental. Shell. Ordenamiento de rbol. Heap. Tournament. Sort particionado. Quick sort. Merge sort. Radix sort. Clculo de direccin. Clasificacin de los algoritmos de ordenamiento de informacin: El hecho de que la informacin est ordenada, nos sirve para poder encontrarla y accesarla de manera ms eficiente ya que de lo contrario se tendra que hacer de manera secuencial. A continuacin se describirn 4 grupos de algoritmos para ordenar informacin: Algoritmos de insercin:

En este tipo de algoritmo los elementos que van a ser ordenados son considerados uno a la vez. Cada elemento es INSERTADO en la posicin 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. Algoritmos de intercambio: En este tipo de algoritmos se toman los elementos de dos en dos, se comparan y se INTERCAMBIAN si no estn en el orden adecuado. Este proceso se repite hasta que se ha analizado todo el conjunto de elementos y ya no hay intercambios. Entre estos algoritmos se encuentran el BURBUJA y QUICK SORT. Algoritmos de seleccin: En este tipo de algoritmos se SELECCIONA o se busca el elemento ms pequeo (o ms grande) de todo el conjunto de elementos y se coloca en su posicin adecuada. Este proceso se repite para el resto de los elementos hasta que todos son analizados. Entre estos algoritmos se encuentra el de SELECCION DIRECTA. Algoritmos de enumeracin: En este tipo de algoritmos cada elemento es comparado contra los dems. En la comparacin se cuenta cuntos elementos son ms pequeos que el elemento que se est analizando, generando as una ENUMERACION. El nmero generado para cada elemento indicar su posicin. Los mtodos simples son: Insercin (o por insercin directa), seleccin, burbuja y shell, en dnde el ltimo es una extensin al mtodo de insercin, siendo ms rpido. Los mtodos ms complejos son el quicksort (ordenacin rpida) y el heap sort. A continuacin se mostrarn los mtodos de ordenamiento ms simples.

METODO DE INSERCIN. Este mtodo 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 posicin 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 comparacin pues se encontr que el elemento ya est ordenado y se coloca en su posicin (que es la siguiente a la del ltimo nmero 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 nmero de elementos que contiene a[]. paso 1: [Para cada pos. del arreglo] For i < 2 to N do 3

paso 2: [Inicializa v y j] v < a[i] j < i. paso 3: [Compara v con los anteriores] While a[j1] > v AND j>1 do paso 4: [Recorre los datos mayores] Set a[j] < a[j1], paso 5: [Decrementa j] set j < j1. paso 5: [Inserta v en su posicin] 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 posicin actual de v. Luego compara esta 's' con lo que hay en la posicin j1, 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 posicin de la 'o'; decrementa j, la cual ahora tiene la posicin en dnde estaba la 's'; compara a 'o' con a[j1] , es decir, con 'a'. Como no es menor que la 'a' sale del for y pone la 'o' en la posicin a[j]. El resultado hasta este punto es el arreglo siguiente: a = ['a','o','s','r',....] As se contina y el resultado final es el arreglo ordenado : a = ['a','a','e','e','g','i','l','m','n','o','p','r','s','t','x'] ORDENACION POR INSERCION DIRECTA Supngase que se desea ordenar los siguientes claves del arreglo A utilizando el mtodo de insercin directa el cual consiste en insertar un elemento del arreglo en la parte izquierda del mismo que ya se encuentra ordenada. Este proceso se repite desde el segundo hasta el nesimo elemento. Ejemplo 1: A= 15, 67, 08, 16, 44, 27, 12, 35 Comparaciones realizadas: 1 pasada A[2] < A[1] 67 < 15 No hay intercambio A= 15, 67, 08, 16, 44, 27, 12, 35 2 pasada A[3] < A[2] 08 < 67 Si hay intercambio A= 15, 08, 67, 16, 44, 27, 12, 35 3 pasada A[4] < A[3] 08 < 15 Si hay intercambio A= 08, 15, 67, 16, 44, 27, 12, 35 Y as sucesivamente... INSERCION (A,N) Insercion(A,N) 4

{El algoritmo ordena los elementos del arreglo utlizando el mtodo de insercin directa A es un arreglo de N elementos} {I, aux y k son variables de tipo entero} 1. Repetir con I desde 2 hasta N Hacer aux< A[I] y k< I1 a. Repetir mientras(aux < [k]) y (k > 1) , Hacer A[k+1]< A[k] y k< k1 b. {fin del ciclo del paso 1.1} c. Si a[k]<=aux Entonces: Hacer A[k+1]<aux Si no Hacer A[k+1]< A[k], A[k]<A[k] d. { fin del condicional del paso 1.3} 2. {fin del condicional del paso1} Prueba de escritorio: Si A= 15, 67, 08, 16, 44, 27, 12, 35 1 pasada 08, 67, 15, 16, 44, 27, 12, 35 2 pasada 08, 15, 67, 16, 44, 27, 12, 35 3 pasada 08, 15, 16, 67, 44, 27, 12, 35 4 pasada 08, 15, 16, 44, 67, 27, 12, 35 5 pasada 08, 15, 16, 44, 27, 67, 12, 35 6 pasada 08, 15, 16, 44, 27, 12, 67, 35 7 pasada 08, 15, 16, 44, 27, 12, 35, 67 ANALISIS DE EFICIENCIA DEL METODO DE INSERCION DIRECTA En general afirmar que si el arreglo se encuentra ordenado se efectan como mximo n1 comparaciones y o movimientos entre elementos Cmin = n1. El nmero mximo de comparaciones y movimientos se produce cuando los elementos del arreglo estn en orden inverso Cmax = 1+2+3+............+(n1) = n*(n1)/2 Cmax= (n2n)/2 El nmero de comparaciones promedio que es cuando los elementos aparecen en el arreglo en forma aleatoria, puede ser calculado mediante la suma de las comparaciones mnimas y mximas divididas entre 2. Cmed = [(n1) + (n2n)/2]/2 Al hacer la operacin, nos queda: Cmed = (n2+n2)/4 Respecto al nmero de movimientos Knuth obtiene los siguiente: Mmin = 0 Mmed = (n2n)/4 Mmax = (n2n)/2 El tiempo necesario para ejecutar el algoritmo es proporcionar a n2, O(n2). A pesar de ser un mtodo ineficiente y recomendable solo cuando n es pequea, el mtodo de insercin directa se comporta mejor que el mtodo de intercambio directo analizado anteriormente. Ejemplo 2: Entrada A: array [0..n] de T Salida

A Variables x: T i,j: 0..n Inicio desde i < 2 hasta i < n hacer x < A[i] A[0] < x (* asignamos x al centinela *) j < i1 (* empezar a comparar por el anterior *) mientras x < A[j] hacer A[j+1] < A[j] (* desplazamos hacia la izquierda *) j < j1 (* pasamos a otro elemento *) fin_mientras A[j+1] < x fin_desde Fin Anlisis del algoritmo En el mejor de los casos, el array estar inicialmente ordenado, entonces el bucle interno (mientras) slo ejecuta el paso de comparacin, que siempre ser falso. Esto implica que en el mejor de los casos el nmero de comparaciones sera n1. Adems, el nmero de asignaciones ser fijo para cada iteracin y, por tanto, el coste asociado ser lineal con n. En el peor de los casos, el array est inversamente ordenado y el nmero de comparaciones y asignaciones a realizar ser mximo. En este caso, el nmero de pasos a realizar por el algoritmo es proporcional a 'n cuadrado'. En el caso medio, el algoritmo de insercin directa, tanto en el nmero de comparaciones como en el nmero de asignaciones es de orden cuadrtico.

También podría gustarte