Vous êtes sur la page 1sur 26

Ing.

Armandina Leal Flores


Ing. Jakeline Marcos Abed
Algoritmos de Ordenamiento
Algoritmos de Ordenamiento
Qu son?
Son secuencias de instrucciones cuya
funcin es acomodar los valores de un
arreglo de menor a mayor.
Para qu se utilizan?
Para poder buscar un valor ms
rpidamente.
Ejemplo: Directorio Telefnicos
Algoritomos
Intercambio
Bubble Sort
Selection Sort
Insertion Sort

Merge Sort
Quicksort

Heap Sort
Shell Sort
Eficiencia en tiempo de ejecucin:
Una medida de eficiencia es:
Contar el # de comparaciones (C)
Contar el # de movimientos de items (M)

Estos estn en funcin de el #(n) de items a ser
ordenados.

La eficiencia de los algoritmos se mide por el nmero
de comparaciones e intercambios que tienen que
hacer, es decir, se toma n como el nmero de
elementos que tiene el arreglo o vector a ordenar y
se dice que un algoritmo realiza O(n
2
)
comparaciones cuando compara n veces los n
elementos, n x n = n
2

Intercambio
El ms sencillo de todos. Se basa en:
la lectura sucesiva de la lista a ordenar,
comparando el elemento inferior de la
lista con todos los restantes
Efectuando el intercambio de posiciones
cuando el orden resultante no sea
correcto.
Siendo n la cantidad de elementos,
realizar al menos n1 pasadas.
Ejemplo: Ordenacin por Intercambio
Pasada 0: Se compara a[0] con todos, as primero se cambia a[0] con a[1]
pues a[0] > a[1] y debe ser Ascendente, es decir a[0]<a[1] y por ltimo
a[0] con a[3]
a[0] a[1] a[2] a[3]
8 4 6 2
a[0] a[1] a[2] a[3]
4 8 6 2
a[0] a[1] a[2] a[3]
2 8 6 4
Pasada 1: El elemento mas pequeo esta en a[0] y se analiza la sublista restante.
Al cabo de la pasada, el segundo mas chico esta en a[1].
Pasada i: Al cabo de la pasada i, el elemento de orden i, est en a[i]
a[0] a[1] a[2] a[3]
2 4 8 6
Pasada 2:
a[0] a[1] a[2] a[3]
2 6 8 4
Ordenacin por Intercambio
public void ordIntercambio (int a[])
{ int i, j, aux; /* se realizan n-1 pasadas, a[o] ... a[n-2] */
for (i = 0 ; i <= n-2 ; i++)/* coloca mnimo de a[i+1]...a[n-1] en a[i] */
for (j = i+1 ; j <= n-1 ; j++)
if (a[i] > a[j])
{ aux = a[i];
a[i] = a[j];
a[j]= aux ;
}
}
Complejidad (n1)(n2)
Del Orden F(n)=n
2
.
Burbuja
El mtodo recibe como parmetro un
arreglo unidimensional que contiene
los elementos a ordenar.
El mtodo va comparando cada
elemento del arreglo con el que sigue;
si el elemento es mayor que el otro, se
intercambian.
Este proceso dejar el valor ms
grande al final del arreglo.
Se debe repetir el proceso hasta que
no haya ningn intercambio.
Burbuja
29 3 8 17 30 15 42
3
29 8 17 30 15 42
3
8
29 17 30 15 42
3 8 17 29 30 15 42
3 8 17 29 30 15 42
3 8 17 29 15 30 42
3 8 17 29 15 30 42
3 8 17 29 15 30
3 8 17 29 15 30
3 8 17 29 15 30
3 8 17 29 15 30
3 8 17 15 29 30
3 8 17 15 29 30
3 8 17 15 29
3 8 17 15 29
3 8 17 15 29
3 8 15 17 29
3 8 15 17 29
3 8 15 17
3 8 15 17
3 8 15 17
3 8 15 17
1
2
3
4
Cantidad de Intercambios: 6
Cantidad de comparaciones: 18
Ejemplo : Ordenacin por Burbuja
Pasada 0:
a[0] a[1] a[2] a[3] a[4]
50 20 40 80 30
Lista Original
Intercambio 50 y 40
a[0] a[1] a[2] a[3] a[4]
20 40 50 80 30
Intercambio 50 y 20
a[0] a[1] a[2] a[3] a[4]
20 50 40 80 30
Intercambio 50 y 80
a[0] a[1] a[2] a[3] a[4]
20 40 50 80 30
Intercambio 80 y 30
a[0] a[1] a[2] a[3] a[4]
20 40 50 30 80
Pasada 1:
Ordenados: 20 y 40,
40 y 50.
a[0] a[1] a[2] a[3] a[4]
20 40 50 30 80
Intercambio 50 y 30
a[0] a[1] a[2] a[3] a[4]
20 40 30 50 80
Pasada 2:
Intercambio 40 y 30
a[0] a[1] a[2] a[3] a[4]
20 30 40 50 80
Lista Ordenada
public void burbuja(int a[]) {
boolean interruptor = true;
for (pasada=0; pasada<n-1 && interruptor; pasada++) {
interruptor = false; // no se han hecho intercambios
for (j=0; j<n-1-pasada; j++)
if (a[j+1] < a[j]) {
tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
interruptor = true;
}
}
}
}
El Mejor Caso: con una lista ya
ordenada, har una sola pasada:
Del Orden F(n)
El Peor Caso: Del Orden F(n
2
)
Seleccin Directa
El mtodo recibe como parmetro el
arreglo que contiene los elementos a
ordenar.
Busca en el arreglo el valor ms grande.
Intercambia este valor por el que se
encuentra en la ltima posicin.
Repite el proceso con los valores restantes
del arreglo (ya no se incluyen los valores
que ya se acomodaron)
==Tambin puede hacerse en sentido
contrario, en lugar de buscar el mayor se
busca el menor y se coloca en la primera
posicin del arreglo.
Seleccin
29 3 42 17 30 15 8
29 3 8 17 30 15 42
29 3 8 17 30 15
29 3 8 17 15 30
29 3 8 17 15
15 3 8 17 29
15 3 8 17
15 3 8
8 3
8 3 15
3 8
Comparaciones: 6 + 5 + 4 + 3 + 2 + 1: 21
Intercambios: 5
Busca en el arreglo el valor ms grande.
Intercambia este valor por el que se
encuentra en la ltima posicin.
Ejemplo: Ordenacin por Seleccin
Pasada 0: Lista entre 0 y 3. Selecciona el 21
y lo pasa al a[0]
a[0] a[1] a[2] a[3]
51 21 39 80
Pasada 1: Lista entre 1 y 3. Selecciona el 39
y lo pasa al a[1]
a[0] a[1] a[2] a[3]
21 39 51 80
Pasada 2: Lista entre 2 y 3. No selecciona
nada.
a[0] a[1] a[2] a[3]
21 39 51 80
a[0] a[1] a[2] a[3]
21 51 39 80
Lista Original
Busca en el arreglo el valor ms chico.
Intercambia este valor por el que se
encuentra en la primera posicin.
Codificacin: Ordenamiento por Seleccin
public void ordSeleccion (int a[])
{ int indiceMenor, i, j;
int aux;
for (i = 0; i < n-1; i++) // ordenar a[0]..a[n-2] y a[n-1] en cada pasada
{ indiceMenor = i; // comienzo de la exploracin en ndice i
for (j = i+1; j < n; j++) // j explora la sublista a[i+1]..a[n-1]
if (a[j] < a[indiceMenor]) indiceMenor = j;
if (i != indiceMenor) // sita el elemento mas pequeo en a[i]
{ aux = a[i];
a[i] = a[indiceMenor];
a[indiceMenor] = aux ;
}
}
}
Complejidad (n (n1))/2
Del Orden F(n)=n
2
.
No hay caso mejor ni peor
Ordenacin Por Insercin
Similar al proceso de ordenar tarjetas en un
tarjetero por orden alfabtico:
Consiste en insertar un elemento en su posicin
correcta, dentro de una lista que ya est Ordenada.
Algoritmo:
El 1er elemento a[0] se lo considera ordenado
Se inserta a[1] en la posicin correcta, delante o
detrs del a[0], segn sea mayor o menor
Por cada ciclo i (desde i=1 hasta n1) se explora la
sublista a[0]..a[i1] buscando la posicin correcta de
insercin del elemento a[i]
Al dejar vaco la posicin a[i] se impone un
desplazamiento de todo el vector, desde el lugar de
insercin.
Insercin
El mtodo recibe como parmetro el
arreglo que contiene los elementos a
ordenar.
Compara cada elemento del arreglo con
los que se encuentran en las posiciones
anteriores.
Si resulta que el elemento con el que se
est comparando es mayor, se recorre a la
derecha
Si resulta que el elemento con el que se
est comparando es menor, se detiene el
proceso debido a que ya se encontr la
posicin del elemento.
29 3 42 17 30 15 8
3 29 42 17 30 15 8
3 29 42 17 30 15 8
3 17 29 30 42 15 8
3 29 42 42 30 15 8
3 29 29 42 30 15 8
3 17 29 42 30 15 8
3 17 29 42 42 15 8
3 17 29 30 42 42 8
3 17 29 30 30 42 8
3 17 29 29 30 42 8
3 17 17 29 30 42 8
Insercin
29 29 42 17 30 15 8
Insercin
3 15 17 29 30 42 8
3 15 17 29 30 30 42
3 15 17 29 29 30 42
3 15 17 17 29 30 42
3 15 15 17 29 30 42
3 15 17 29 30 42 42
3 8 15 17 29 30 42
Corrimientos : 18
Comparaciones: 17
Codificacin: Ordenacin por Insercin
public void ordInsercion (int [] a)
{ int i, j, aux;
for (i = 1; i < n; i++) // El ndice j explora sublista a[i-1]..a[0]
buscando posicin correcta del elemento destino, para asignarlo en a[j]
{ j = i;
aux = a[i]; // se localiza el punto de insercin explorando hacia
abajo
while (j > 0 && aux < a[j-1]) // desplazar elementos hacia
arriba para hacer espacio
{ a[j] = a[j-1];
j--;
}
a[j] = aux;
}
}
Complejidad (n (n1))/2
Del Orden F(n)=n
2
.
Animacin de los algoritmos
Sort de Burbuja (Bubble Sort)
Seleccin (Selection Sort)
Insercin (Insertion Sort)
Merge Sort
Quick Sort

http://www.it.uc3m.es/java/
Seccin Animaciones
Comparaciones entre Sorts
http://www.herongyang.com/sort/index.html
Ing. Armandina Leal Flores
Ing. Jakeline Marcos Abed
Bsquedas
Bsqueda
Encontrar una CLAVE especfica
dentro de un Almacn, donde existe
un campo con la clave que se
referencia.
Si est en la lista, informa su posicin.
Si el Almacn est ordenado la
bsqueda puede ser ms eficiente.
Buscar un nombre-telfono en el
directorio telefnico.

Bsqueda
Dos Tipos de Bsqueda:
Secuencial: Busca la clave explorando un
elemento despus de otro.
Es la nica forma de encontrarlo cuando la Lista
no est Ordenada por la Clave de Bsqueda.
Eficiencia del Orden de F(n)=n.
Binaria: En listas Ordenadas por la clave de
Bsqueda es el mejor mtodo.
Se sita la lectura al centro de la lista y se le
comprueba contra la clave.
Si clave < a[central]: Buscar entre inferior y central1
Si clave > a[central]: Buscar entre central+1 y superior
Eficiencia del Orden F(n)=log
2
n
Bsqueda Binaria Iterativa
public int busquedaBin(int lista[], int clave)
{ int central, bajo, alto, valorCentral, n;
bajo = 0;
n = lista.length;
alto = n-1;
while (bajo <= alto) {
central = (bajo + alto)/2;
valorCentral = lista[central];
if (clave == valorCentral)
return central;
else if (clave < valorCentral)
alto = central -1;
else
bajo = central + 1;
}
return -1;
}

Vous aimerez peut-être aussi