Beruflich Dokumente
Kultur Dokumente
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: ..?
Ordenacin
Mtodos
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
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?
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;
}
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;
}