230 likes | 366 Views
Tema 8b. Búsqueda y ordenación en arreglos. Ordenación. Es un proceso que altera el orden de los elementos de un conjunto. Tiene asociada una relación de orden Números: valor Letras: alfabeto Auto: ¿Velocidad? ¿Tamaño? ¿Autonomía? Amigos: ¿…..?
E N D
Tema 8b Búsqueda y ordenación en arreglos
Ordenación • Es un proceso que altera el orden de los elementos de un conjunto. • Tiene asociada una relación de orden • Números: valor • Letras: alfabeto • Auto: ¿Velocidad? ¿Tamaño? ¿Autonomía? • Amigos: ¿…..? • La ordenación puede ser ascendente o descendente.
Ordenación • Métodos • Burbuja (Bubble sort) • Selección • Inserción • Burbuja bidireccional • Rápido (Quicksort)
Bubble sort • Los elementos más “pesados” “bajan” • Los elementos más “livianos” “suben” • Cuando ya no puede bajar más se sigue con el resto.
a r a a a c c r c r c f b f f f e b b b i e e e a i i i a a r a Bubble sort 1-Como r es más “pesada” que a, r “baja” y a “sube” 2-Como r es más “pesada” que c, r “baja” y c “sube” …
Bubble sort void bubblesort(int numeros[]){ int i,j; for(i=1;i<N;i++) for(j=0;j<(N-i);j++) if(numeros[j]>numeros[j+1]){ int aux = numeros[j+1]; numeros[j+1] = numeros[j]; numeros[j] = aux; } }
Selección • Se selecciona el minimo valor entre los N elementos y se intercambia con el primero. • Se repite la operación con los N-1 elementos restantes.
Selección void selectionsort_up(int numeros[]){ int i,j,k,r; int n; int inter; for(i=0;i<N-1;i++){ inter=0; k=i; n=numeros[i]; for(j=i+1;j<N;j++) if(numeros[j]<n){ r=j; n=numeros[j]; inter=1; } if(inter){ numeros[r] = numeros[i]; numeros[i] = n; } } }
Inserción • Ordena el subarreglos de manera creciente • Ordena los primeros dos elementos • Luego va insertando los siguientes en su posición ordenada en el subarreglo.
Inserción void insertionsort_up(int numeros[]){ int i,j; int n; for(i=1;i<N;i++){ n=numeros[i]; for(j=i-1; (j>=0)&&(n<numeros[j]) ;j--) numeros[j+1] = numeros[j]; numeros[j+1] = n; } }
Quicksort • Los algoritmos anteriores ejecutan un numero de instrucción del orden de N2 • Ordenar 10 elementos ejecuta a100 instrucciones. • Ordenar 100 elementos ejecuta a10000 instrucciones. • Ordenar 1000 elementos ejecuta a1000000 instrucciones.
Quicksort aN2 Tiempo de ejecución Nº de elementos
Quicksort • Quicksort es un algoritmo de proposito general. • Es en la mayoria de los casos el más eficiente. • Tiene un orden a N log(N) • Tiene una estructura recursiva.
Quicksort Tiempo de ejecución aNlog(N) Nº de elementos
Búsqueda • Consiste en buscar un elemento dentro de un conjunto • Requiere de una relación de igualdad • Números: Igual valor • ¿Cuántos decimales considerar? • Letras: mismo símbolo • ¿Mayusculas y minúsculas? • Autos • Modelo y año • Placa patente • Codigo chasis • Etc…
Búsqueda • Métodos • Secuencial • Binaria
Búsqueda secuencial • Recorrer uno por uno los elementos. • Comparar según sea el criterio. • Se puede querer recuperar el valor o ela posición. • Tiene un orden aN
Búsqueda secuencial int secuencial_search(int numeros[], int valor){ int i=0; for(i=0;i<N;i++) if(numeros[i]==valor) return i; return -1; }
Búsqueda secuencial • En arreglos bidimensionales el algortimo es similar. • Se puede hacer por filas o por columas. • Esta decision puede afectar el rendimiento • Por lo general, preferir por filas.
Búsqueda secuencial int bisecuencial_search(int numeros[][N], int valor){ int i,j; for(i=0;i<N;i++) for(j=0;j<N;j++) if(numeros[i][j]==valor) return i*N+j; return -1; } … pos = bisecuencial_search(binumeros, 11); if(pos>=0) printf("bisec) numeros[%d][%d] = %d\n", pos/N,pos%N, binumeros[pos/N][pos%N]);
Búsqueda binaria • Muy rápida • Requiere datos ordenados • No sirve para recuperar la posición original. • “Encierra” el numero búscado “achicando” a la mitad el intervalo que parece contenerlo. • Tiene un orden alog2N
Búsqueda binaria int binary_search(int numeros[], int valor){ int i,j,m; insertionsort_up(numeros); i=0; j=N-1; while(i<=j){ m=(i+j)/2; if(valor<numeros[m]) j=m-1; else if(valor>numeros[m]) i=m+1; else return m; } return -1; }
Fin Tema 8b Búsqueda y ordenación en arreglos