Sei sulla pagina 1di 8

ESTRUCTURA DE DATOS II

METODOS DE ORDENAMIENTO Y BUSQUEDA

MAURICIO PASTOR ALVIS IVAN CAMPO

JAIRO MARTINEZ BANDA

FACULTAD DE INGENIERIA

PROGRAMA DE INGENIERIA DE SISTEMAS

18/03/2014 SINCELEJO-SUCRE

CORPORACION UNIVERSITARIA DEL CARIBE CECAR

Introduccin En el siguiente trabajo daremos a conocer de una manera animada, el funcionamiento de dos algoritmos de ordenacin (Directo y logartmico). Para medir la eficiencia de ambos tomaremos como parmetros la cantidad de comparaciones e intercambios que el algoritmo lleva a cabo para organizar los datos de un arreglo. Mediremos la eficiencia de estos en 3 casos: Favorable, no favorable y aleatorio. Tambin estaremos animando dos algoritmos de bsqueda (Secuencial y binaria), de estos dos tomaremos como parmetro la cantidad de comparaciones que realiza para poder encontrar o no un dato especifico.

Descripcin de los algoritmos: Algoritmo de la burbuja: Como ya sabemos mediante el mtodo burbuja, dado un arreglo de n nmeros, se requiere de n-1 pasos para dejar el arreglo ordenado. Se puede observar que en el primer paso el primer elemento mayor queda en la primera posicin mayor (ltima si es que estamos ordenando de menor a mayor); en el segundo paso el segundo elemento mayor queda en la segunda posicin mayor (penltima); y as sucesivamente. Por esta razn el nmero de comparaciones, debera irse reduciendo en uno, en cada paso. Se puede observar adems, que en muchos casos se consigue tener ordenado el arreglo, en un nmero menor de pasos a n-1, por lo cual el resto de los pasos seran innecesarios. Considerando estos dos hechos se podra mejorar el mtodo burbuja eliminando los pasos innecesarios y reduciendo las comparaciones con cada paso. Una manera sencilla de hacer esto sera detectando mediante algn registro si se han efectuado cambios o no, y reduciendo el nmero de comparaciones en cada paso Codigo: float X[100], AUX; int N, paso, j; int bandera=1; for(paso=0;paso<N-1&&bandera==1;paso++) { bandera=0; for(j=0;j<N-paso-1;j++) { if(X[j]<X[j+1]) { bandera=1; AUX=X[j]; X[j]=X[j+1]; X[j+1]=AUX; } } }

Algoritmo de QuickSort: El algoritmo trabaja de la siguiente forma: Elegir un elemento de la lista de elementos a ordenar, al que llamaremos pivote. Resituar los dems elementos de la lista a cada lado del pivote, de manera que a un lado queden todos los menores que l, y al otro los mayores. Los elementos iguales al pivote pueden ser colocados tanto a su derecha como a su izquierda, dependiendo de la implementacin deseada. En este momento, el pivote ocupa exactamente el lugar que le corresponder en la lista ordenada. La lista queda separada en dos sablistas, una formada por los elementos a la izquierda del pivote, y otra por los elementos a su derecha. Repetir este proceso de forma recursiva para cada sablista mientras stas contengan ms de un elemento. Una vez terminado este proceso todos los elementos estarn ordenados. void ordena( int vect[], int izq, int der ){ int i = 0, j = 0; int x = 0, aux = 0; i = izq; j = der; x = vect [ (izq + der) /2 ]; do{ while( (vect[i] < x) && (j <= der) ){ i++;} while( (x < vect[j]) && (j > izq) ){ j--;} if( i <= j ){ aux = vect[i]; vect[i] = vect[j]; vect[j] = aux; i++; j--; } }while( i <= j ); if( izq < j ) ordena( vect, izq, j ); if( i < der ) ordena( vect, i, der ); }

Algoritmo de bsqueda secuencial: Se utiliza cuando el vector no est ordenado o no puede ser ordenado previamente. Consiste en buscar el elemento comparndolo secuencialmente (de ah su nombre) con cada elemento del arreglo hasta encontrarlo, o hasta que se llegue al final. La existencia se puede asegurar cuando el elemento es localizado, pero no podemos asegurar la no existencia hasta no haber analizado todos los elementos del arreglo. A continuacin se muestra el pseudocdigo del algoritmo. Cdigo:
int busquedaSimple(int int i; for(i=0; i<n; i++){ if(dato==vector[i]) { return i; } } return -1; } vector[], int n, int dato) {

Algoritmo de bsqueda binaria: Se utiliza cuando el vector en el que queremos determinar la existencia de un elemento est previamente ordenado. Este algoritmo reduce el tiempo de bsqueda considerablemente, ya que disminuye exponencialmente el nmero de iteraciones necesarias. Est altamente recomendado para buscar en arrays de gran tamao. Por ejemplo, en uno conteniendo 50.000.000 elementos, realiza como mximo 26 comparaciones (en el peor de los casos). Para implementar este algoritmo se compara el elemento a buscar con un elemento cualquiera del array (normalmente el elemento central): si el valor de ste es mayor que el del elemento buscado se repite el procedimiento en la parte del array que va desde el inicio de ste hasta el elemento tomado, en caso contrario se toma la parte del array que va desde el elemento tomado hasta el final. De esta manera obtenemos intervalos cada vez ms pequeos, hasta que se obtenga un intervalo indivisible. Si el elemento no se encuentra dentro de este ltimo entonces se deduce que el elemento buscado no se encuentra en todo el array. A continuacin se presenta el pseudocdigo del algoritmo, tomando como elemento inicial el elemento central del array.

Codigo:
int busquedaBinaria(int vector[], int n, int dato) { int centro,inf=0,sup=n-1; while(inf<=sup){ centro=(sup+inf)/2; if(vector[centro]==dato) return centro; else if(dato < vector [centro] ){ sup=centro-1; } else { inf=centro+1; } } return -1; }

Conclusiones: Podemos concluir que tanto los mtodos de ordenamiento como los de bsqueda son de gran importancia al momento de realizar un programa que requiera de la organizacin y la bsqueda de datos. La eficiencia del algoritmo depende de la situacin de los datos.

Bibliografa: http://es.wikipedia.org/wiki/Quicksort http://es.wikipedia.org/wiki/Algoritmo_de_b%C3%BAsqueda http://www.estructuradedatos.galeon.com/metodoquicksort.htm Archivos proporcionados en la clase.

Potrebbero piacerti anche