Está en la página 1de 56

Algoritmos y Estructuras de Datos

Métodos de Ordenamiento
Ing. Aníbal Sardón Paniagua
C16290@utp.edu.pe
anibal.sardon@hotmail.com
Logros de Aprendizaje

Al finalizar la sesión el estudiante:


• Conocer los algoritmos de ordenamiento básicos.
• Descubrir el uso de los algoritmos de ordenamiento
sobre vectores y matrices
Temas a tratar
• Esquemas básicos de ordenamiento
• Método Burbuja
• Método Inserción
• Método Selección
• Método Quicksort
Datos/Observaciones
Esquemas de Ordenamiento básico
• La ordenación o clasificación de datos es una operación
consistente en organizar un conjunto de datos según
determinado orden con respecto a uno de los campos de los
elementos del conjunto.
• Por ejemplo, una guía telefónica tiene los campos: nombres,
dirección y número de teléfono.
Se puede ordenar por número en orden ascendente o descendente.
• Clave: el elemento por el cual está ordenado un conjunto de
datos.
• Ordenación Interna: (ordenación de listas) si los datos se guardan en
arrays, listas enlazadas, árboles (memoria RAM).
• Ordenación Externa: (ordenación de archivos) si los datos de guardan
archivos.(disco duro, DVD)
Esquemas de Ordenamiento básico

• El ordenamiento es un problema importante, existen un gran


número de algoritmos de ordenación.
• En general, los algoritmos más eficientes son más complejos y
menos intuitivos.
• Estudiaremos en total cinco de estos algoritmos.

• Los tres primeros (Burbuja, Inserción, y Selección) son muy sencillos,


aunque no muy eficientes.

• Los otros dos (MergeSort y QuickSort) son tan eficientes como se


puede esperar para un algoritmo de ordenación, pero menos
intuitivos.
Bubble Sort
Algoritmo de la Burbuja: Bubble Sort

El algoritmo de ordenación de la burbuja es


uno de los más fáciles de recordar.

Su nombre describe de manera intuitiva su


funcionamiento.

Imaginamos que los números menores ‘pesan


menos’ y ‘suben a la superficie’ como una
burbuja.

Se basa en el intercambio entre pares de items


Algoritmo de la Burbuja: Bubble Sort

Datos
originales 1ª iter. 2ª 3ª 4ª
36 6 6 6 6
24 36 10 10 10
10 24 36 12 12
6 10 24 36 24
12 12 12 24 36

9
Algoritmo de la Burbuja: Bubble Sort

Datos
originales 1ª iter. 2ª 3ª 4ª
36 6 6 6 6
24 36 10 10 10
10 24 36 12 12
6 10 24 36 24
12 12 12 24 36

10
Algoritmo de la Burbuja: Bubble Sort

Datos
originales 1ª iter. 2ª 3ª 4ª
36 6 6 6 6
24 36 10 10 10
10 24 36 12 12
6 10 24 36 24
12 12 12 24 36

11
Algoritmo de la Burbuja: Bubble Sort

Datos
originales 1ª iter. 2ª 3ª 4ª
36 6 6 6 6
24 36 10 10 10
10 24 36 12 12
6 10 24 36 24
12 12 12 24 36

12
Algoritmo de la Burbuja: Bubble Sort

Datos
originales 1ª iter. 2ª 3ª 4ª
36 6 6 6 6
24 36 10 10 10
10 24 36 12 12
6 10 24 36 24
12 12 12 24 36

13
Algoritmo de la Burbuja: Bubble Sort

for(i=n;i>0;i--)
for(j=0;j<i-1;j++)
if (a[j] > a[j+1])
{
t=a[j];
a[j] = a[j+1];
a[j+1]=t;
}

14
Algoritmo de la Burbuja: Bubble Sort

1 funcion Burbuja (V : vector de natural ; n : natural ) devuelve vector de natural


2 variable i,j : natural ;
3 para i ← 1 hasta n-1 hacer
4 para j ← n hasta i+1 pasos –1 hacer
5 si (V[j] < V[j-1]) entonces
6 Intercambiar(V, j, j-1);
7 fsi
8 fpara
9 fpara
10 devuelve V;
11 funcion
12
13 accion Intercambiar (V : vector de natural ; i,j : natural )
14 variable aux : natural ;
15 aux ← V[i] ;
16 V[i] ← V[j] ;
17 V[j] ← aux ;
18 faccion
Preguntas
Manos a la Obra, a programar ….
Insertion Sort
Algoritmo de Inserción: Insertion Sort
Se basa en el método seguido por los jugadores de cartas:
➢ Sec-destino (ordenada) Secuencia-Origen(por ordenar)
V[1 . . . i-1] V[i . . . n]
➢ En cada paso tomamos el elemento V[i] y lo insertamos donde convenga de la
secuencia destino.

44 55 12 42 94 18 6 67 ❑para i=2 hasta n hacer


insertar V[i] en V[1..i-1]
i=2 44 55 fpara
i=3 12 44 55
❑Para simplificar la inserción
i=4 12 42 44 55 ampliamos el vector a V[0..n] para
i=5 12 42 44 55 94 poner en v[0] el marcador o centinela
que simplifique la búsqueda de la
i=6 12 18 42 44 55 94 inserción.
i=7 6 12 18 42 44 55 94 ❑Insertar v[i] en v[0..i]:
si v[i-1]<v[i] hacer
i=8 6 12 18 42 44 55 67 94 intercambiar V[i] por v[i-1]
sino terminar
fsi
Algoritmo de Inserción: Insertion Sort

Array
original: 44 55 12 42 94 18 06 67
i=2 44 55 12 42 94 18 06 67
i=3 12 44 55 42 94 18 06 67
i=4 12 42 44 55 94 18 06 67
i=5 12 42 44 55 94 18 06 67
i=6 12 18 42 44 55 94 06 67
i=7 06 12 18 42 44 55 94 67
i=8 06 12 18 42 44 55 67 94
20
Algoritmo de Inserción: Insertion Sort

Array
original: 44 55 12 42 94 18 06 67
i=2 44 55 12 42 94 18 06 67
i=3 12 44 55 42 94 18 06 67
i=4 12 42 44 55 94 18 06 67
i=5 12 42 44 55 94 18 06 67
i=6 12 18 42 44 55 94 06 67
i=7 06 12 18 42 44 55 94 67
i=8 06 12 18 42 44 55 67 94
21
Algoritmo de Inserción: Insertion Sort

Array
original: 44 55 12 42 94 18 06 67
i=2 44 55 12 42 94 18 06 67
i=3 12 44 55 42 94 18 06 67
i=4 12 42 44 55 94 18 06 67
i=5 12 42 44 55 94 18 06 67
i=6 12 18 42 44 55 94 06 67
i=7 06 12 18 42 44 55 94 67
i=8 06 12 18 42 44 55 67 94
22
Algoritmo de Inserción: Insertion Sort

Array
original: 44 55 12 42 94 18 06 67
i=2 44 55 12 42 94 18 06 67
i=3 12 44 55 42 94 18 06 67
i=4 12 42 44 55 94 18 06 67
i=5 12 42 44 55 94 18 06 67
i=6 12 18 42 44 55 94 06 67
i=7 06 12 18 42 44 55 94 67
i=8 06 12 18 42 44 55 67 94
23
Algoritmo de Inserción: Insertion Sort

Array
original: 44 55 12 42 94 18 06 67
i=2 44 55 12 42 94 18 06 67
i=3 12 44 55 42 94 18 06 67
i=4 12 42 44 55 94 18 06 67
i=5 12 42 44 55 94 18 06 67
i=6 12 18 42 44 55 94 06 67
i=7 06 12 18 42 44 55 94 67
i=8 06 12 18 42 44 55 67 94
24
Algoritmo de Inserción: Insertion Sort

Array
original: 44 55 12 42 94 18 06 67
i=2 44 55 12 42 94 18 06 67
i=3 12 44 55 42 94 18 06 67
i=4 12 42 44 55 94 18 06 67
i=5 12 42 44 55 94 18 06 67
i=6 12 18 42 44 55 94 06 67
i=7 06 12 18 42 44 55 94 67
i=8 06 12 18 42 44 55 67 94
25
Algoritmo de Inserción: Insertion Sort

Array
original: 44 55 12 42 94 18 06 67
i=2 44 55 12 42 94 18 06 67
i=3 12 44 55 42 94 18 06 67
i=4 12 42 44 55 94 18 06 67
i=5 12 42 44 55 94 18 06 67
i=6 12 18 42 44 55 94 06 67
i=7 06 12 18 42 44 55 94 67
i=8 06 12 18 42 44 55 67 94
26
Algoritmo de Inserción: Insertion Sort

Array
original: 44 55 12 42 94 18 06 67
i=2 44 55 12 42 94 18 06 67
i=3 12 44 55 42 94 18 06 67
i=4 12 42 44 55 94 18 06 67
i=5 12 42 44 55 94 18 06 67
i=6 12 18 42 44 55 94 06 67
i=7 06 12 18 42 44 55 94 67
i=8 06 12 18 42 44 55 67 94
27
Algoritmo de Inserción: Insertion Sort
for(i=1;i<n;i++)
{
j=i-1;
t=a[i];
while (j>=0 && t<a[j])
{
a[j+1] = a[j];
j=j-1;
}
a[j+1]=t;
}

28
Algoritmo de Inserción: Insertion Sort
1 funcion Insercion(V: vector de natural; n:natural) devuelve vector de natural
2 variable i,j : natural ;
3 V[0] ← MIN_INT;
4 para i ← 2 hasta n hacer
5 j ← i;
6 mientras (V[j] < V[j-1]) hacer
7 Intercambiar(V, j, j-1);
8 j ← j-1;
9 fmientras
10 fpara
11 devuelve V;
12 ffuncion

13 accion Intercambiar (V : vector de natural ; i,j : natural )


14 variable aux : natural ;
15 aux ← V[i] ;
16 V[i] ← V[j] ;
17 V[j] ← aux ;
18 faccion
Preguntas
Manos a la Obra, a programar ….
Selection Sort
Algoritmo de Selección: Selection Sort
En cada paso seleccionamos el elemento de menor valor de los no ordenados y lo colocamos
como primero de los no ordenados:
seleccionamos-entre colocamos-en quedará-por-ordenar
i=1 v[1..n] v[1] v[2..n]
i=2 v[2..n] v[2] v[3..n]
i=3 v[3..n] v[3] v[4..n]
i=n-1 v[n-1..n] v[n-1] v[4..n]
El último ya queda ordenado!

❑ Para i=1 hasta n-1 hacer


Asignar a k el menor valor de v[i..n]
Intercambiar v[i] con v[k]
fpara
❑Idea opuesta a la de Inserción:
•Inserción: trabaja sobre los ya ordenados
•Selección: trabaja sobre los no ordenados
Algoritmo de Selección: Selection Sort

En cada paso seleccionamos el elemento de menor valor de


los no ordenados y lo colocamos como primero de los no
ordenados:
seleccionamos-entre colocamos-en quedará-por-ordenar
i=1 v[1..n] v[1] v[2..n]
i=2 v[2..n] v[2] v[3..n]
i=3 v[3..n] v[3] v[4..n]
i=n-1 v[n-1..n] v[n-1] v[4..n]
El último ya queda ordenado!
Algoritmo de Selección: Selection Sort
1 funcion Seleccion(V: vector de natural; n: natural) devuelve
vector de natural
2 variable i,j,menor : natural ;
3 para i ← 1 hasta n - 1 hacer
4 menor ← i;
5 para j ← i + 1 hasta n hacer
6 si (V[j] < V[menor]) entonces
7 menor ← j;
8 fsi
9 fpara
10 Intercambiar(V, i, menor);
11 fpara
12 devuelve V;
13 ffuncion
Algoritmo de Selección: Selection Sort

• En éste método, en el i-ésimo paso seleccionamos el


elemento con la llave de menor valor, entre a[i],…, a[n] y
lo intercambiamos con a[i].
• Como resultado, después de i pasadas, el i-ésimo
elemento menor ocupará a[1],…, a[i] en el lugar
ordenado.

36
Algoritmo de Selección: Selection Sort

Array
original: 44 55 12 42 94 18 06 67
i=2 06 55 12 42 94 18 44 67
i=3 06 12 55 42 94 18 44 67
i=4 06 12 18 42 94 55 44 67
i=5 06 12 18 42 94 55 44 67
i=6 06 12 18 42 44 55 94 67
i=7 06 12 18 42 44 55 94 67
i=8 06 12 18 42 44 55 67 94
37
Algoritmo de Selección: Selection Sort

Array
original: 44 55 12 42 94 18 06 67
i=2 06 55 12 42 94 18 44 67
i=3 06 12 55 42 94 18 44 67
i=4 06 12 18 42 94 55 44 67
i=5 06 12 18 42 94 55 44 67
i=6 06 12 18 42 44 55 94 67
i=7 06 12 18 42 44 55 94 67
i=8 06 12 18 42 44 55 67 94
38
Algoritmo de Selección: Selection Sort

Array
original: 44 55 12 42 94 18 06 67
i=2 06 55 12 42 94 18 44 67
i=3 06 12 55 42 94 18 44 67
i=4 06 12 18 42 94 55 44 67
i=5 06 12 18 42 94 55 44 67
i=6 06 12 18 42 44 55 94 67
i=7 06 12 18 42 44 55 94 67
i=8 06 12 18 42 44 55 67 94
39
Algoritmo de Selección: Selection Sort

Array
original: 44 55 12 42 94 18 06 67
i=2 06 55 12 42 94 18 44 67
i=3 06 12 55 42 94 18 44 67
i=4 06 12 18 42 94 55 44 67
i=5 06 12 18 42 94 55 44 67
i=6 06 12 18 42 44 55 94 67
i=7 06 12 18 42 44 55 94 67
i=8 06 12 18 42 44 55 67 94
40
Algoritmo de Selección: Selection Sort

Array
original: 44 55 12 42 94 18 06 67
i=2 06 55 12 42 94 18 44 67
i=3 06 12 55 42 94 18 44 67
i=4 06 12 18 42 94 55 44 67
i=5 06 12 18 42 94 55 44 67
i=6 06 12 18 42 44 55 94 67
i=7 06 12 18 42 44 55 94 67
i=8 06 12 18 42 44 55 67 94
41
Algoritmo de Selección: Selection Sort

Array
original: 44 55 12 42 94 18 06 67
i=2 06 55 12 42 94 18 44 67
i=3 06 12 55 42 94 18 44 67
i=4 06 12 18 42 94 55 44 67
i=5 06 12 18 42 94 55 44 67
i=6 06 12 18 42 44 55 94 67
i=7 06 12 18 42 44 55 94 67
i=8 06 12 18 42 44 55 67 94
42
Algoritmo de Selección: Selection Sort

Array
original: 44 55 12 42 94 18 06 67
i=2 06 55 12 42 94 18 44 67
i=3 06 12 55 42 94 18 44 67
i=4 06 12 18 42 94 55 44 67
i=5 06 12 18 42 94 55 44 67
i=6 06 12 18 42 44 55 94 67
i=7 06 12 18 42 44 55 94 67
i=8 06 12 18 42 44 55 67 94
43
Algoritmo de Selección: Selection Sort

Array
original: 44 55 12 42 94 18 06 67
i=2 06 55 12 42 94 18 44 67
i=3 06 12 55 42 94 18 44 67
i=4 06 12 18 42 94 55 44 67
i=5 06 12 18 42 94 55 44 67
i=6 06 12 18 42 44 55 94 67
i=7 06 12 18 42 44 55 94 67
i=8 06 12 18 42 44 55 67 94
44
Algoritmo de Selección: Selection Sort
for(i=0;i<n-1;i++)
{
k=i;
t=a[i];
for (j=i+1; j<n; j++)
{
if (a[j] < t)
{
t= a[j];
k=j;
}
a[k]= a[i];
a[i]= t;
}
}

45
Preguntas
Manos a la Obra, a programar ….
Quick Sort
Algoritmo QuickSort
• El ordenamiento rápido (quicksort) es un algoritmo de ordenación creado
por el científico británico en computación Charles Antony Richard Hoare.
• Basado en la técnica de divide y vencerás. Conocido como método rápido
y de ordenamiento por partición.
• El algoritmo trabaja de la siguiente forma:
1. Se elige un elemento v de la lista L de elementos al que se le llama pivote.
2. Se particiona la lista L en tres listas:
a) L1 - que contiene todos los elementos de L menos v que sean menores o
iguales que v
b) L2 - que contiene a v
c) L3 - que contiene todos los elementos de L menos v que sean mayores o
iguales que v
3. Se aplica la recursión sobre L1 y L3
4. Se unen todas las soluciones que darán forma final a la lista L finalmente ordenada.
Como L1 y L3 están ya ordenados, lo único que tenemos que hacer es concatenar
L1, L2 y L3
Algoritmo QuickSort
• Ejemplo:
Algoritmo QuickSort
• Ejemplo:
Preguntas
Manos a la Obra, a programar ….
Resumen
1. La ordenación o clasificación de datos es una operación consistente en
organizar un conjunto de datos según determinado orden con respecto a
uno de los campos de los elementos del conjunto
a) Ordenación Interna: (ordenación de listas) si los datos se guardan en arrays, listas
enlazadas, árboles (memoria RAM).
b) Ordenación Externa: (ordenación de archivos) si los datos de guardan
archivos.(disco duro, DVD)
2. Bubble Sort: Imaginamos que los números menores ‘pesan menos’ y
‘suben a la superficie’ como una burbuja. Se basa en el intercambio entre
pares de items
3. Insertion Sort: Se basa en el método seguido por los jugadores de cartas.
Tenemos 2 secciones: Sección Destino (ordenada) y la Sección Origen (por
ordenar). En cada paso tomamos el elemento V[i] (Sección de Origen) y lo
insertamos donde convenga de la Sección Destino.
Resumen
5. Selection Sort: En cada paso seleccionamos el elemento de menor valor
de los no ordenados (Sección Origen) y lo colocamos como primero de los
no ordenados. Idea opuesta a la de Inserción:
• Inserción: trabaja sobre los ya ordenados
• Selección: trabaja sobre los no ordenados
6. Quicksort: Basado en la técnica de divide y vencerás. Conocido como
método rápido y de ordenamiento por partición. Utiliza un pivote para
separar la lista en 2 sub listas, y repite el proceso recursivamente.

También podría gustarte