La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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.

Presentaciones similares


Presentación del tema: "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."— Transcripción de la presentación:

1 Tema 8b Búsqueda y ordenación en arreglos

2 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.

3 Ordenación Métodos –Burbuja (Bubble sort) –Selección –Inserción –Burbuja bidireccional –Rápido (Quicksort)

4 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.

5 Bubble sort r a c f b e i a 1-Como r es más “pesada” que a, r “baja” y a “sube” a r c f b e i a a c r f b e i a 2-Como r es más “pesada” que c, r “baja” y c “sube” a c f b e i a r …

6 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; }

7 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.

8 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; }

9 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.

10 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; }

11 Quicksort Los algoritmos anteriores ejecutan un numero de instrucción del orden de N 2 –Ordenar 10 elementos ejecuta  100 instrucciones. –Ordenar 100 elementos ejecuta  10000 instrucciones. –Ordenar 1000 elementos ejecuta  1000000 instrucciones.

12 Quicksort Nº de elementos Tiempo de ejecución N2N2

13 Quicksort Quicksort es un algoritmo de proposito general. Es en la mayoria de los casos el más eficiente. Tiene un orden  N log(N) Tiene una estructura recursiva.

14 Quicksort Nº de elementos Tiempo de ejecución  Nlog(N)

15 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…

16 Búsqueda Métodos –Secuencial –Binaria

17 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  N

18 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; }

19 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.

20 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]);

21 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  log 2 N

22 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; }

23 Fin Tema 8b Búsqueda y ordenación en arreglos


Descargar ppt "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."

Presentaciones similares


Anuncios Google