You are on page 1of 4

Ordenación

• Es un proceso que altera el orden de los elementos


de un conjunto.
Tema 8b • Tiene asociada una relación de orden
– Números: valor
– Letras: alfabeto
Búsqueda y ordenación en arreglos – Auto: ¿Velocidad? ¿Tamaño? ¿Autonomía?
– Amigos: ¿…..?
• La ordenación puede ser ascendente o
descendente.

Ordenación Bubble sort


• Métodos • Los elementos más
– Burbuja (Bubble sort) “pesados” “bajan”
– Selección • Los elementos más
“livianos” “suben”
– Inserción
• Cuando ya no puede
– Burbuja bidireccional
bajar más se sigue con
– Rápido (Quicksort) el resto.

Bubble sort Bubble sort


1-Como r es más “pesada” que a, 2-Como r es más “pesada” que c,
r “baja” y a “sube” r “baja” y c “sube” void bubblesort(int numeros[]){
int i,j;
r a a a
for(i=1;i<N;i++)
a r c c for(j=0;j<(N-i);j++)
c c r f if(numeros[j]>numeros[j+1]){
f f f b int aux = numeros[j+1];

numeros[j+1] = numeros[j];
b b b e
numeros[j] = aux;
e e e i }
i i i a }
a a a r

1
Selección
Selección void selectionsort_up(int numeros[]){
int i,j,k,r;
int n;
int inter;
for(i=0;i<N-1;i++){
• Se selecciona el minimo valor entre los N inter=0;
elementos y se intercambia con el primero. k=i;
n=numeros[i];
for(j=i+1;j<N;j++)
• Se repite la operación con los N-1 if(numeros[j]<n){
elementos restantes. r=j;
n=numeros[j];
inter=1;
}
if(inter){
numeros[r] = numeros[i];
numeros[i] = n;
}
}
}

Inserción Inserción
void insertionsort_up(int numeros[]){
• Ordena el subarreglos de manera creciente int i,j;
int n;
• Ordena los primeros dos elementos for(i=1;i<N;i++){
n=numeros[i];
• Luego va insertando los siguientes en su for(j=i-1; (j>=0)&&(n<numeros[j]) ;j--)
posición ordenada en el subarreglo. numeros[j+1] = numeros[j];
numeros[j+1] = n;
}
}

Quicksort Quicksort
• Los algoritmos anteriores ejecutan un
Tiempo de ejecución

numero de instrucción del orden de N2


– Ordenar 10 elementos ejecuta α100
instrucciones. αN2
– Ordenar 100 elementos ejecuta α10000
instrucciones.
– Ordenar 1000 elementos ejecuta α1000000
instrucciones.

Nº de elementos

2
Quicksort Quicksort
• Quicksort es un algoritmo de proposito

Tiempo de ejecución
general.
• Es en la mayoria de los casos el más
eficiente.
• Tiene un orden α N log(N)
• Tiene una estructura recursiva.
αNlog(N)

Nº de elementos

Búsqueda Búsqueda
• Consiste en buscar un elemento dentro de un • Métodos
conjunto
– Secuencial
• Requiere de una relación de igualdad
– Números: Igual valor – Binaria
• ¿Cuántos decimales considerar?
– Letras: mismo símbolo
• ¿Mayusculas y minúsculas?
– Autos
• Modelo y año
• Placa patente
• Codigo chasis
• Etc…

Búsqueda secuencial Búsqueda secuencial


int secuencial_search(int numeros[], int valor){
• Recorrer uno por uno los elementos.
int i=0;
• Comparar según sea el criterio. for(i=0;i<N;i++)
if(numeros[i]==valor) return i;
• Se puede querer recuperar el valor o ela return -1;
posición.
}
• Tiene un orden αN

3
Búsqueda secuencial Búsqueda secuencial
int bisecuencial_search(int numeros[][N], int valor){
• En arreglos bidimensionales el algortimo es
similar. int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
• Se puede hacer por filas o por columas. if(numeros[i][j]==valor) return i*N+j;
return -1;
• Esta decision puede afectar el rendimiento }

– Por lo general, preferir por filas. pos = bisecuencial_search(binumeros, 11);
if(pos>=0)
printf("bisec) numeros[%d][%d] = %d\n",
pos/N,pos%N,
binumeros[pos/N][pos%N]);

Búsqueda binaria Búsqueda binaria


int binary_search(int numeros[], int valor){
• Muy rápida int i,j,m;
insertionsort_up(numeros);
• Requiere datos ordenados
i=0;
• No sirve para recuperar la posición original. j=N-1;
while(i<=j){
• “Encierra” el numero búscado “achicando” m=(i+j)/2;
if(valor<numeros[m]) j=m-1;
a la mitad el intervalo que parece else if(valor>numeros[m]) i=m+1;
else return m;
contenerlo. }
return -1;
• Tiene un orden αlog2N }

Fin Tema 8b

Búsqueda y ordenación en arreglos

You might also like