Está en la página 1de 7

UNIDAD 5 METODOS DE ORDENAMIENTO Y BUSQUEDA

Uno de los procedimientos ms comunes y tiles en el procesamiento de datos, es la clasificacin u ordenacin de los mismos. Se considera ordenar al proceso de reorganizar un conjunto dado de objetos en una secuencia determinada. Cuando se analiza un mtodo de ordenacin, hay que determinar cuntas comparaciones e intercambios se realizan para el caso ms favorable, para el caso medio y para el caso ms desfavorable. La colocacin en orden de una lista de valores se llama Ordenacin. Por ejemplo, se podra disponer una lista de valores numricos en orden ascendente o descendente, o bien una lista de nombres en orden alfabtico. La localizacin de un elemento de una lista se llama bsqueda. 5.1 METODOS DE ORDENAMIENTO Intercambio Seleccin Insercin. En cada familia se distinguen dos versiones: un mtodo simple y directo, fcil de comprender pero de escasa eficiencia respecto al tiempo de ejecucin, y un mtodo rpido, ms sofisticado en su ejecucin por la complejidad de las operaciones a realizar, pero mucho ms eficiente en cuanto a tiempo de ejecucin. En general, para arreglos con pocos elementos, los mtodos directos son ms eficientes (menor tiempo de ejecucin) mientras que para grandes cantidades de datos se deben emplear los llamados mtodos rpidos. Intercambio El mtodo de intercambio se basa en comparar los elementos del arreglo e intercambiarlos si su posicin actual o inicial es contraria inversa a la deseada. Pertenece a este mtodo el de la burbuja clasificado como intercambio directo. Aunque no es muy eficiente para ordenar listas grandes, es fcil de entender y muy adecuado para ordenar una pequea lista de unos 100 elementos o menos. Una pasada por la ordenacin de burbujeo consiste en un recorrido completo a travs del arreglo, en el que se comparan los contenidos de las casillas adyacentes, y se cambian si no estn en orden. La ordenacin por burbujeo completa consiste en una serie de pasadas (burbujeo) que termina con una en la que ya no se hacen cambios porque todo est en orden. Ejemplo: Supngase que estn almacenados cuatro nmeros en un arreglo con casillas de memoria de x[1] a x[4]. Se desea disponer esos nmeros en orden creciente. La primera pasada de la ordenacin por burbujeo hara lo siguiente: Comparar el contenido de x[1] con el de x[2]; si x[1] contiene el mayor de los nmeros, se intercambian sus contenidos. Comparar el contenido de x[2] con el de x[3]; e intercambiarlos si fuera necesario. Comparar el contenido de x[3] con el de x[4]; e intercambiarlos si fuera necesario. Al final de la primera pasada, el mayor de los nmeros estar en x[4]. Quicksort. Si bien el mtodo de la burbuja era considerado como el peor mtodo de ordenacin simple o menos eficiente, el mtodo Quicksort basa su estrategia en la idea intuitiva de que es ms fcil ordenar una gran estructura de datos subdividindolas en otras ms pequeas introduciendo un orden relativo entre ellas. En otras palabras, si dividimos el array a ordenar en dos subarrays de forma que los elementos del subarray inferior sean

ms pequeos que los del subarray superior, y aplicamos el mtodo reiteradamente, al final tendremos el array inicial totalmente ordenado. Existen adems otros mtodos conocidos, el de ordenacin por montculo y el de shell. Seleccin. Los mtodos de ordenacin por seleccin se basan en dos principios bsicos: Seleccionar el elemento ms pequeo (o ms grande) del arreglo. Colocarlo en la posicin ms baja (o ms alta) del arreglo. A diferencia del mtodo de la burbuja, en este mtodo el elemento ms pequeo (o ms grande) es el que se coloca en la posicin final que le corresponde. Insercin. El fundamento de este mtodo consiste en insertar los elementos no ordenados del arreglo en subarreglos del mismo que ya estn ordenados. Dependiendo del mtodo elegido para encontrar la posicin de insercin tendremos distintas versiones del mtodo de insercin. BSQUEDA. La bsqueda es una operacin que tiene por objeto la localizacin de un elemento dentro de la estructura de datos. A menudo un programador estar trabajando con grandes cantidades de datos almacenados en arreglos y pudiera resultar necesario determinar si un arreglo contiene un valor que coincide con algn valor clave o buscado. Siendo el array de una dimensin o lista una estructura de acceso directo y a su vez de acceso secuencial, encontramos dos tcnicas que utilizan estos dos mtodos de acceso, para encontrar elementos dentro de un array: bsqueda lineal y bsqueda binaria. Bsqueda Secuencial: La bsqueda secuencial es la tcnica ms simple para buscar un elemento en un arreglo. Consiste en recorrer el arreglo elemento a elemento e ir comparando con el valor buscado (clave). Se empieza con la primera casilla del arreglo y se observa una casilla tras otra hasta que se encuentra el elemento buscado o se han visto todas las casillas. El resultado de la bsqueda es un solo valor, y ser la posicin del elemento buscado o cero. Dado que el arreglo no est en ningn orden en particular, existe la misma probabilidad de que el valor se encuentra ya sea en el primer elemento, como en el ltimo. Por lo tanto, en promedio, el programa tendr que comparar el valor buscado con la mitad de los elementos del arreglo. El mtodo de bsqueda lineal funciona bien con arreglos pequeos o para arreglos no ordenados. Si el arreglo est ordenado, se puede utilizar la tcnica de alta velocidad de bsqueda binaria, donde se reduce sucesivamente la operacin eliminando repetidas veces la mitad de la lista restante. Bsqueda Binaria. La bsqueda binaria es el mtodo ms eficiente para encontrar elementos en un arreglo ordenado. El proceso comienza comparando el elemento central del arreglo con el valor buscado. Si ambos coinciden finaliza la bsqueda. Si no ocurre as, el elemento buscado ser mayor o menor en sentido estricto que el central del arreglo. Si el elemento buscado es mayor se procede a hacer bsqueda binaria en el subarray superior, si el elemento buscado es menor que el contenido de la casilla central, se debe cambiar el segmento a considerar al segmento que est a la izquierda de tal sitio central. 5.1.1 FUNDAMENTO ALGORITMOS DE ORDENAMIENTO #include include include

define MAX 100 //Prototipos. void burbuja(int a[],int n); void burbujam(int a[],int n); void mezc(int a[],int b[],int c[],int m,int n); void insercion(int a[],int n); void seleccion(int a[],int n); void shell(int a[],int n); int numelem(); void tipocap(int a[],int n); void captura(int a[],int n); void capinsercion(int a[],int n); void caleat(int a[],int n); void ver(int a[],int n); char menu(); int mcap(); //Principal. void main(){ int a[MAX],b[MAX],c[MAX],n,m,k; int salir=0; do { switch(menu()){ case a: case A: clrscr(); n=numelem(); tipocap(a,n); clrscr(); printf(Su Arreglo:\n); ver(a,n); printf(\n\nPresione Cualquier Tecla, ); printf(Para Comenzar Ordenamiento); getch(); burbuja(a,n); clrscr(); printf(Arreglo ordenado:\n); ver(a,n); getch(); break; case b: case B: clrscr(); n=numelem(); tipocap(a,n); clrscr(); printf(Su Arreglo:\n); ver(a,n); printf(\n\nPresione Cualquier Tecla, ); printf(Para Comenzar Ordenamiento); getch(); clrscr(); burbujam(a,n); clrscr(); printf(Arreglo ordenado:\n); ver(a,n); getch(); break; case c: case C: clrscr(); n=numelem(); capinsercion(a,n);

clrscr(); printf(Arreglo ordenado:\n); ver(a,n); getch(); break; case d: case D: clrscr(); n=numelem(); tipocap(a,n); clrscr(); printf(Su Arreglo:\n); ver(a,n); printf(\n\nPresione Cualquier Tecla, ); printf(Para Comenzar El Ordenamiento); getch(); seleccion(a,n); clrscr(); printf(Arreglo ordenado:\n); ver(a,n); getch(); break; case e: case E: clrscr(); n=numelem(); tipocap(a,n); clrscr(); printf(Su Arreglo:\n); ver(a,n); printf(\n\nPresione Cualquier Tecla, ); printf(Para Comenzar El Ordenamiento); getch(); shell(a,n); clrscr(); printf(Arreglo ordenado:\n); ver(a,n); getch(); break; case f: case F: clrscr(); printf(Arreglo N1\n); (1500); m=numelem(); tipocap(a,m); printf(Arreglo N1:\n); ver(a,m); clrscr(); printf(Ordenando Arreglo N1\n);

(1500); seleccion(a,m); clrscr(); ver(a,m); clrscr(); printf(Arreglo N2\n); (1500); n=numelem(); tipocap(b,n); printf(Arreglo N2:\n); ver(b,n); clrscr(); printf(Ordenando Arreglo N2\n); (1500); seleccion(b,n); clrscr(); ver(b,n); clrscr(); gotoxy(28,10); printf(Mezclando); mezc(a,b,c,m,n); (1500); clrscr(); gotoxy(23,10); printf(Arreglos Mezclados.); (1500); clrscr(); printf(Ordenado por el Metodo de Mezcla.\n); k=m+n; ver(c,k); getch(); break; case s: case S: salir=1; break; default: printf(Opcion No Valida.); getch(); break; } }while(salir!=1); clrscr(); gotoxy(10,15); printf(Ana Gabriela Hernandez Ramirez.); getch(); } 5.1.2 EJEMPLOS ALGORITMOS ORDENAMIENTO //Funciones de Prototipos. void tipocap(int a[],int n){ switch(mcap()){

case 1: captura(a,n); break; case 2: caleat(a,n); break; } } void capinsercion(int a[],int n){ int i; for(i=0;ia[j+1]){ aux=a[j]; a[j]=a[j+1]; a[j+1]=aux; } printf(\n); ver(a,n); } } } void burbujam(int a[],int n){ int i,j=0,band=1,aux; while(ja[i+1]){ aux=a[i]; a[i]=a[i+1]; a[i+1]=aux; band=1; } } printf(\nPasada N%d\n,j); ver(a,n); j++; } } void insercion(int a[],int n){ int i,j,aux; for(i=1; i0 && aux0){ for(i=inter;i=0){ k=j+inter; if(a[j]<=a[k]){ j; } else{ aux=a[j]; a[j]=a[k]; a[k]=aux; j=j-inter; } } clrscr(); printf(Pasada N%d:\n,x); ver(a,n); } inter=inter/2; } } void mezc(int x[],int y[],int z[],int m,int n){ int i=0,j=0,k=0; while((i<=m)&&(j 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 posicin] Set a[j] v. paso 6: [Fin] End. 5.1.2.3 ORDENAMIENTO POR 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. paso 1: [Inicializa i al final de arreglo] For i N down to 1 do

paso 2: [Inicia desde la segunda pos.] For j 2 to i do paso 4: [Si a[j-1] es mayor que el que le sigue] If a[j-1] < i="j="0;iif(array[i]==elemento) { solucion[j]=i; j++; } 5.2.1.2 BUSQUEDA BINARIA Bsqueda binaria o dicotmica Para utilizar este algoritmo, el array debe estar ordenado. La bsqueda binaria consiste en dividir el array por su elemento medio en dos subarrays ms pequeos, y comparar el elemento con el del centro. Si coinciden, la bsqueda se termina. Si el elemento es menor, debe estar (si est) en el primer subarray, y si es mayor est en el segundo. Por ejemplo, para buscar el elemento 3 en el array {1,2,3,4,5,6,7,8,9} se realizaran los siguientes pasos: Se toma el elemento central y se divide el array en dos: {1,2,3,4}5-{6,7,8,9} Como el elemento buscado (3) es menor que el central (5), debe estar en el primer subarray: {1,2,3,4} Se vuelve a dividir el array en dos: {1}2-{3,4} Como el elemento buscado es mayor que el central, debe estar en el segundo subarray: {3,4} Se vuelve a dividir en dos: {}3-{4} Como el elemento buscado coincide con el central, lo hemos encontrado. 5.2.1.3 BUSQUEDA TRANSFORMACION DE CLAVES Es un mtodo de bsqueda que aumenta la velocidad de bsqueda, pero que no requiere que los elementos estn ordenados. Consiste en asignar a cada elemento un ndice mediante una transformacin del elemento. Esta correspondencia se realiza mediante una funcin de conversin, llamada funcin hash. La correspondencia ms sencilla es la identidad, esto es, al nmero 0 se le asigna el ndice 0, al elemento 1 el ndice 1, y as sucesivamente. Pero si los nmeros a almacenar son demasiado grandes esta funcin es inservible. Por ejemplo, se quiere guardar en un array la informacin de los 1000 usuarios de una empresa, y se elige el nemro de DNI como elemento identificativo. Es inviable hacer un array de 100.000.000 elementos, sobre todo porque se desaprovecha demasiado espacio. Por eso, se realiza una transformacin al nmero de DNI para que nos de un nmero menor, por ejemplo coger las 3 ltimas cifras para guardar a los empleados en un array de 1000 elementos. Para buscar a uno de ellos, bastara con realizar la transformacin a su DNI y ver si est o no en el array.

También podría gustarte