1 / 23

Tema 8b

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: ¿…..?

tamyra
Télécharger la présentation

Tema 8b

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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 N2 • Ordenar 10 elementos ejecuta a100 instrucciones. • Ordenar 100 elementos ejecuta a10000 instrucciones. • Ordenar 1000 elementos ejecuta a1000000 instrucciones.

  12. Quicksort aN2 Tiempo de ejecución Nº de elementos

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

  14. Quicksort Tiempo de ejecución aNlog(N) Nº de elementos

  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 aN

  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 alog2N

  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

More Related