You are on page 1of 27

AE | ORDENACIN

Universidad ORT Uruguay


AGENDA
Bubble Sort

Insertion Sort

Selection Sort

Merge Sort

Quick Sort

Comparacin de tiempos de ejecucin


INTRODUCCIN
Existen varios mtodos para ordenar
estructuras de datos lineales.

Algunos son ms difciles de implementar


que otros, pero suelen ofrecer mayor
eficiencia en tiempo de ejecucin.

Veremos algoritmos simples: Insertion Sort,


Bubble Sort, Selection Sort.

..Y algoritmos basados en Divide and


Conquer: Merge Sort, Quick Sort.
BUBBLE SORT
Es un sencillo algoritmo de ordenamiento.

Consiste en ir comparando cada elemento


del vector a ordenar con el siguiente, e
intercambiarlos de posicin si estn en orden
equivocado.

El algoritmo obtiene su nombre por la forma


en que suben los elementos por el vector,
como si fuesen pequeas burbujas.
BUBBLE SORT
void bubbleSort(int[] v){
int n = v.length()-1;
for (int i=0; i<=n-1; i++){
for (int j=0; j<=n-1-i; j++){
if (v[j]>v[j+1]){
temp = v[j];
v[j] = v[j+1];
v[j+1] = temp;
}
}
}
}
BUBBLE SORT
Sea N = v.length()
En la primer pasada nos aseguramos que el mayor
elemento queda en la posicin N-1 (la ltima) del array.

En la segunda pasada nos aseguramos que el segundo


mayor elemento queda posicionado en la posicin N-2
(penltima).

En general, en la pasada P nos aseguramos que el P-


simo mayor elemento queda en la posicin N-P del
array.

En la ltima pasada nos aseguramos que el mnimo


elemento queda en la posicin 0 del array.
INSERTION SORT
El ordenamiento por insercin es una forma muy
natural de ordenar para el ser humano.
Es la tcnica que aplicamos por ejemplo cuando
queremos ordenar un mazo de cartas.
Inicialmente se tiene un solo elemento, que
obviamente ya es un conjunto ordenado.
Luego, cuando haykelementos ordenados de
menor a mayor, se toma el elementok+1y se
compara con todos los elementos ya ordenados,
detenindose cuando se encuentra un elemento
menor. En este punto seinsertael
elementok+1debiendo desplazar los elementos
mayores un lugar hacia la derecha.
INSERTION SORT
public static void insertSort (int[] v){
for (int i=1; i<v.length(); i++) {
int aux = v[i];
int j = i-1;
while (j>=0 && v[j]>aux){
v[j+1] = v[j];
j--;
}
v[j+1] = aux;
}
}
SELECTION SORT
Quizs esta aproximacin sea la forma ms
natural de ordenar una array.

La estrategia es la siguiente:
Si no hay elementos, hemos terminado.
Sino, Busco el mnimo elemento del array.
Lo intercambio con el primero.
Contino con el mismo procedimiento en el resto
del array.
SELECTION SORT
void selecccion(int[] a) {
for (int i = 0; i < a.length - 1; i++)
{ int min = i;
for (int j = i + 1; j < a.length; j++)
{ if (a[j] < a[min])
min = j;
}
if (i != min)
{ int aux = a[i];
a[i] = a[min];
a[min] = aux;
}
}
}
MERGE SORT
Es un claro ejemplo de Divide y Vencers.

PASO BASE

Si el array tiene 0 o 1 elemento, ya esta


ordenado.

DIVIDE
Si tiene ms de un elemento, dividir el array en
dos sub-arrays de la mitad del tamao.

Ordenar cada sub-array recursivamente con

VENCERS
MergeSort.

Mezclar los dos sub-arrays ordenados de forma


ordenada en un solo array.
MERGE SORT
MERGE SORT
Necesitamos un algoritmo que nos permita
entrelazar dos arrays ordenados de forma
eficiente.

Se puede realizar de forma eficiente y


sencilla si se dispone de un espacio adicional
al final del array para utilizarlo como
centinela. Solo sirve si al centinela se le
puede dar un valor previamente acordado
que sea mayor a cualquier elemento de los
array, por ejemplo MAXINT.
MERGE SORT JUNTAR SUB
SOLUCIONES
QUICK SORT
Tambin est basado en la tcnica Divide y
Vencers.
El algoritmo fundamental es el siguiente:
Elegir
un elemento [de la lista de elementos a
ordenar], al que llamaremospivote.

Resituar los dems elementos de la lista a cada lado


del pivote, de manera que a un lado queden todos los
menores que l, y al otro los mayores. Los elementos
iguales al pivote pueden ser colocados tanto a su
derecha como a su izquierda, dependiendo de la
implementacin deseada.

En este momento, el pivote ocupa exactamente el


lugar que le corresponder en la lista ordenada.
QUICK SORT
El algoritmo fundamental es el siguiente
(continuacin):
La lista queda separada en dos sub-listas, una
formada por los elementos a la izquierda del
pivote, y otra por los elementos a su derecha.

Repetir este proceso de forma recursiva para


cada sub-lista mientras stas contengan ms de
un elemento. Una vez terminado este proceso
todos los elementos estarn ordenados.
QUICK SORT

PASO BASE
Si la cantidad de elementos es 0 o 1,
retornar.

DIVIDE
Elegir el pivote

Reordenar los elementos a los lados del


pivote. A la izquierda los elementos menores

VENCERS
y a la derecha los mayores.

Retornar la lista de la izquierda seguido por


el pivote, seguido por la lista de la derecha.
QUICK SORT EJEMPLO
QUICK SORT ELECCIN DEL PIVOTE
Como se puede suponer, la eficiencia del algoritmo
depende de la posicin en la que termine el pivote
elegido.

En el mejor caso, el pivote termina en el centro de la


lista, dividindola en dos sub-listas de igual tamao.

En el peor caso, el pivote termina en un extremo de la


lista.

Si por ejemplo el algoritmo implementado toma como


pivote siempre el primer elemento delarray, y el array
que le pasamos est ordenado, siempre va a generar a
su izquierda un array vaco, lo cual es ineficiente.
QUICK SORT REPOSICIONAMIENTO
Utilizar dos ndices i (ndice izquierdo) y j
(ndice derecho).

Recorrer la lista simultneamente con i y j: por


la izquierda con i desde el primer elemento y
por la derecha con j desde el ultimo elemento.

Cuando el valor en la posicin i


(lista[i]>pivote) sea mayor que el pivote y el
valor en la posicin j sea menor que el pivote
(lista[j]<pivote), se intercambian los
elementos en esas posiciones.
QUICK SORT REPOSICIONAMIENTO
Repetir hasta que se crucen los ndices.

El punto en que se cruzan los ndices es la


posicin adecuada para colocar el pivote,
porque sabemos que a un lado se
encuentran todos los elementos menores y al
otro los mayores.
QUICK SORT REPOSICIONAMIENTO
QUICK SORT CDIGO
ORDENACIN COMPARACIN
La eficiencia de los algoritmos se mide por el
nmero de comparaciones e intercambios que se
realizan.

Como ejemplo consideraremos nicamente las


comparaciones para comparar los algoritmos:
SelectionSort, MergeSort y QuickSort, con el
siguiente caso:

Cuando ms
11 grande
5 4 6sea -3el 7vector a ordenar
mayor ser la diferencia de la eficiencia de los
algoritmos.
ORDENACIN
COMPARACIN: SELECTION SORT
COMPARACIONES
Selecciona el mnimo realizando 11 5 4 6 -3 7
5 comparaciones: 11 con 5, 5 con 4,
4 con 6, 4 con -3, -3 con 7
5
-3 5 4 6 11 7
Selecciona el mnimo realizando
4 comparaciones: 5 con 4, 4 con 6, 4
4 con 11, 4 con 7 -3 4 5 6 11 7
Selecciona el mnimo realizando 3
3
comparaciones: 5 con 6, 5 con 11,
5 con 7 -3 4 5 6 11 7
Selecciona el mnimo realizando 2 2
comparaciones: 6 con 11, 6 con 7
-3 4 5 6 11 7
Selecciona el mnimo realizando
1 comparaciones: 7 con 11 1
-3 4 5 6 7 11

TOTAL 15
COMPARACIONES
ORDENACIN
COMPARACIN: MERGE SORT
11 5 4 6 -3 7

11 5 4 6 -3 7

DIVIDE
11 5 4 6 -3 7

11 5 6 -3
1 comparacin 1 comparacin

MEZCLA
5 11 -3 6
1 comparacin 2 comparaciones

4 5 11 -3 6 7
5 comparaciones

-3 4 5 6 7 11 TOTAL 10
COMPARACIONES
ORDENACIN
COMPARACIN: QUICK SORT
Ordeno con el pivote=6. 11 5 4 6 -3 7
5 comparaciones:
11 con 6, 5 con 6, 4 con 6,
-3 con 6 y 7 con 6
-3 5 4 6 11 7 Ordeno con el
Ordeno con el pivote=5. pivote=11.
2 comparaciones: 1 comparaciones:
5 con -3, 5 con 4 11 con 7
-3 4 5 7 11
Ordeno con el pivote=-3.
1 comparacin: -3 con 4
-3 4 5

TOTAL 9
COMPARACIONES

You might also like