Sie sind auf Seite 1von 22

Tema 11

Bsqueda y ordenacin en arreglos

Ordenacin
Es un proceso que altera el orden de los elementos
de un conjunto.
Tiene asociada una relacin de orden

Nmeros: valor
Letras: alfabeto
Auto: Velocidad? Tamao? Autonoma?
Amigos: ..?

La ordenacin puede ser ascendente o


descendente.

Ordenacin
Mtodos

Burbuja (Bubble sort)


Seleccin
Insercin
Burbuja bidireccional
Rpido (Quicksort)

Bubble sort
Los elementos ms
pesados bajan
Los elementos ms
livianos suben
Cuando ya no puede
bajar ms se sigue con
el resto.

Bubble sort
1-Como r es ms pesada que a,
r baja y a sube

2-Como r es ms 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;
}
}

Seleccin
Se selecciona el minimo valor entre los N
elementos y se intercambia con el primero.
Se repite la operacin con los N-1
elementos restantes.

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

Insercin
Ordena el subarreglos de manera creciente
Ordena los primeros dos elementos
Luego va insertando los siguientes en su
posicin ordenada en el subarreglo.

Insercin
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 instruccin del orden de N2
Ordenar 10 elementos ejecuta 100
instrucciones.
Ordenar 100 elementos ejecuta 10000
instrucciones.
Ordenar 1000 elementos ejecuta 1000000
instrucciones.

Tiempo de ejecucin

Quicksort

N2

N de elementos

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

Tiempo de ejecucin

Quicksort

Nlog(N)
N de elementos

Bsqueda
Consiste en buscar un elemento dentro de un
conjunto
Requiere de una relacin de igualdad
Nmeros: Igual valor
Cuntos decimales considerar?

Letras: mismo smbolo


Mayusculas y minsculas?

Autos

Modelo y ao
Placa patente
Codigo chasis
Etc

Bsqueda
Mtodos
Secuencial
Binaria

Bsqueda secuencial
Recorrer uno por uno los elementos.
Comparar segn sea el criterio.
Se puede querer recuperar el valor o ela
posicin.
Tiene un orden N

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

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

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

Bsqueda binaria

Muy rpida
Requiere datos ordenados
No sirve para recuperar la posicin original.
Encierra el numero bscado achicando
a la mitad el intervalo que parece
contenerlo.
Tiene un orden log2N

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

Das könnte Ihnen auch gefallen