Tema 8b Búsqueda y ordenación en arreglos. Ordenación Es un proceso que altera el orden de los...

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

Transcript of Tema 8b Búsqueda y ordenación en arreglos. Ordenación Es un proceso que altera el orden de los...

Page 1: 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.

Tema 8b

Búsqueda y ordenación en arreglos

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

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

Ordenación

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

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

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

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

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

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

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

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

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

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

Quicksort

Nº de elementos

Tie

mpo

de

ejec

ució

n

N2

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

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

Quicksort

Nº de elementos

Tie

mpo

de

ejec

ució

n

Nlog(N)

Page 15: 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.

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

Búsqueda

• Métodos– Secuencial– Binaria

Page 17: 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.

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

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

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

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

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

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

Fin Tema 8b

Búsqueda y ordenación en arreglos