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.
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. 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
…
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.
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.
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.
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.
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…
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
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] = %dn",
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;
}