Tema 8b

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

description

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

Transcript of Tema 8b

Page 1: Tema 8b

Tema 8b

Búsqueda y ordenación en arreglos

Page 2: Tema 8b

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.

Page 3: Tema 8b

Ordenación

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

Page 4: Tema 8b

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.

Page 5: Tema 8b

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

Page 6: Tema 8b

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;

}}

Page 7: Tema 8b

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.

Page 8: Tema 8b

Selecciónvoid 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;

}}

}

Page 9: Tema 8b

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.

Page 10: Tema 8b

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;

}}

Page 11: Tema 8b

Quicksort

• Los algoritmos anteriores ejecutan un numero de instrucción del orden de N2

– Ordenar 10 elementos ejecuta 100 instrucciones.

– Ordenar 100 elementos ejecuta 10000 instrucciones.

– Ordenar 1000 elementos ejecuta 1000000 instrucciones.

Page 12: Tema 8b

Quicksort

Nº de elementos

Tie

mpo

de

ejec

ució

n

N2

Page 13: Tema 8b

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.

Page 14: Tema 8b

Quicksort

Nº de elementos

Tie

mpo

de

ejec

ució

n

Nlog(N)

Page 15: Tema 8b

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…

Page 16: Tema 8b

Búsqueda

• Métodos– Secuencial– Binaria

Page 17: Tema 8b

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

Page 18: Tema 8b

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;

}

Page 19: Tema 8b

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.

Page 20: Tema 8b

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

Page 21: Tema 8b

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 log2N

Page 22: Tema 8b

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;

}

Page 23: Tema 8b

Fin Tema 8b

Búsqueda y ordenación en arreglos