Ordenacion

45
Programación II Ing. Mauricio Paletta, Msc Coordinación General de Pregrado UNIVERSIDAD NACIONAL EXPERIMENTAL DE GUAYANA INGENIERÍA EN INFORMÁTICA Programación II Ordenación Presentación

description

Recursion | Lenguaje C++ | Profesor Mauricio Paletta

Transcript of Ordenacion

Page 1: Ordenacion

Programación II

Ing. Mauricio Paletta, Msc

Coordinación General de Pregrado

UNIVERSIDAD NACIONAL EXPERIMENTAL DE GUAYANA

INGENIERÍA EN INFORMÁTICA

Programación II

Ordenación

Presentación

Page 2: Ordenacion

Programación II

Introducción

Ordenación proceso de ordenamiento de

datos siguiendo un criterio específico (menor

a mayor o ascendente, mayor a menor o

descendente, otros).

Muy común en el desarrollo de algoritmos y

programas.

Se le ha dedicado tiempo y esfuerzo para su

estudio.

Page 3: Ordenacion

Programación II

Introducción

Page 4: Ordenacion

Programación II

Algoritmos

1) Por selección.

2) De burbuja.

3) Por inserción.

4) Por incrementos (Shell-sort).

5) Por mezcla (Merge-sort).

6) Por montículos (Heapsort).

7) Rápida (Quicksort)

Page 5: Ordenacion

Programación II

Ordenación por Selección

• En cada iteración se busca el elemento

más pequeño (grande o según el criterio de

ordenación) y se ubica en la posición

correspondiente.

• Se hace un intercambio de posiciones entre

el elemento encontrado y aquél que ocupa

el puesto que el primero debe ocupar.

• Se repite tantas veces como sea necesario.

Page 6: Ordenacion

Programación II

Ordenación por Selección

Page 7: Ordenacion

Programación II

Ordenación por Selección

Page 8: Ordenacion

Programación II

Ordenación por Selección

Page 9: Ordenacion

Programación II

Ordenación por Selección

• Ejemplo:

Page 10: Ordenacion

Programación II

Ordenación por Selección

• Dos ciclos de orden lineal: 1) para buscar el

próximo elemento según el criterio y 2) para

cubrir todos los espacios del conjunto.

• Orden del algoritmo O(n2).

Page 11: Ordenacion

Programación II

Ordenación de Burbuja

• En cada iteración se busca el elemento

más pequeño (grande o según el criterio de

ordenación) y se ubica en la posición

correspondiente.

Page 12: Ordenacion

Programación II

Ordenación de Burbuja

Page 13: Ordenacion

Programación II

Ordenación de Burbuja

Page 14: Ordenacion

Programación II

Ordenación de Burbuja

Page 15: Ordenacion

Programación II

Ordenación de Burbuja

• Ejemplo:

Page 16: Ordenacion

Programación II

Ordenación de Burbuja

• Dos ciclos de orden lineal: 1) para cubrir

todos los espacios del conjunto y 2) para

burbujear el próximo elemento según el

criterio.

• Orden del algoritmo O(n2).

Page 17: Ordenacion

Programación II

Ordenación por Inserción

• En cada iteración se busca el elemento

más pequeño (grande o según el criterio de

ordenación) y se ubica en la posición

correspondiente, aprovechando el

ordenamiento parcial del subconjunto ya

procesado.

Page 18: Ordenacion

Programación II

Ordenación por Inserción

Page 19: Ordenacion

Programación II

Ordenación por Inserción

Page 20: Ordenacion

Programación II

Ordenación por Inserción

• Ejemplo:

Page 21: Ordenacion

Programación II

Ordenación por Inserción

Page 22: Ordenacion

Programación II

Ordenación por Inserción

• Ejemplo:

Page 23: Ordenacion

Programación II

Ordenación por Inserción

• El orden del algoritmo es O(n2). Si el

conjunto ya está ordenado (mejor caso) el

orden del algoritmo es O(n).

Page 24: Ordenacion

Programación II

Ordenación por Incrementos (Shell-sort)

• Donald Shell; “A High-Speed Procedure”,

Communications of the ACM, vol. 2, N 7,

1959, pp. 30-32.

• Se puede ver como una ordenación por

inserción con un enfoque de divide y

vencerás.

• En lugar de ordenar todo el conjunto desde

el comienzo, se ordenan primero pequeños

subgrupos utilizando el método de inserción.

Page 25: Ordenacion

Programación II

Ordenación por Incrementos (Shell-sort)

• Luego de ordenar estos pequeños

subgrupos, se repite el proceso esta vez

con grupos más grandes (un aproximado

del doble de elementos de los grupos

iniciales).

• Finalmente se ordena el conjunto total con

el método de inserción.

Page 26: Ordenacion

Programación II

Ordenación por Incrementos (Shell-sort)

Page 27: Ordenacion

Programación II

• Ejemplo:

Ordenación por Incrementos (Shell-sort)

Page 28: Ordenacion

Programación II

Ordenación por Incrementos (Shell-sort)

• El análisis general del algoritmo sigue

siendo un problema abierto.

• El rendimiento depende de cómo se elija la

secuencia decreciente de los intervalos. Por

ejemplo, para potencias sucesivas de 2 (32,

16, 8, 4, 2, 1) es O(n2). Para el caso 2k – 1

(31, 15, 7, 3, 1) – secuencia de Hibbard -se

puede probar que el desempeño es O(n3/2)

Page 29: Ordenacion

Programación II

Ordenación por Mezcla (Merge-sort)

• Mezcla (merge) consiste en unir dos

conjuntos de datos.

• En este caso se tienen dos conjuntos

ordenados y se desea obtener un tercer

conjunto ordenado que contenga las dos

primeras secuencias ordenadas.

Page 30: Ordenacion

Programación II

Ordenación por Mezcla (Merge-sort)

Page 31: Ordenacion

Programación II

Ordenación por Mezcla (Merge-sort)

Page 32: Ordenacion

Programación II

Ordenación por Mezcla (Merge-sort)

• Ejemplo:

Page 33: Ordenacion

Programación II

Ordenación por Mezcla (Merge-sort)

• Dado lo recursivo del algoritmo su análisis

no es sencillo. La parte de la mezcla tiene

orden igual a O(i) donde i es el tamaño

actual del conjunto. La profundidad de la

recursión es log n para n elementos. Luego

la complejidad del algoritmo se puede

estimar en O(n log n).

Page 34: Ordenacion

Programación II

Ordenación por Montículos (Heapsort)

• Un montículo es una estructura tipo árbol

binario que garantiza que en la cima

siempre está el elemento mayor.

• Si se van eliminando los elementos de la

cima y se va rearmando el montículo

adecuadamente se puede ir ordenando el

conjunto de mayor a menor.

Page 35: Ordenacion

Programación II

Ordenación por Montículos (Heapsort)

Page 36: Ordenacion

Programación II

Ordenación por Montículos (Heapsort)

• Ejemplo:

Page 37: Ordenacion

Programación II

Ordenación por Montículos (Heapsort)

• Ejemplo:

Page 38: Ordenacion

Programación II

Ordenación por Montículos (Heapsort)

• Ejemplo:

Page 39: Ordenacion

Programación II

Ordenación por Montículos (Heapsort)

• Construir el montículo tiene una

complejidad de O(n); las n eliminaciones

representan un orden de O(log n) cada una;

luego la complejidad del algoritmo es O(n

log n).

• A diferencia de los otros algoritmos,

siempre se conoce el mayor elemento del

conjunto parcialmente ordenado.

Page 40: Ordenacion

Programación II

Ordenación Rápida (Quicksort)

• Desarrollado por C.A.R. Hoare en 1962.

• La idea básica es acomodar el conjunto en

dos partes de manera tal que todos los

elementos del subconjunto izquierdo sean

menores que los del subconjunto derecho.

• El elemento que establece la división se

llama pivote.

• El proceso se repite recursivamente hasta

lograr el ordenamiento total del conjunto.

Page 41: Ordenacion

Programación II

Ordenación Rápida (Quicksort)

Page 42: Ordenacion

Programación II

Ordenación Rápida (Quicksort)

Page 43: Ordenacion

Programación II

Ordenación Rápida (Quicksort)

• Ejemplo:

Page 44: Ordenacion

Programación II

Ordenación Rápida (Quicksort)

• Ejemplo:

(Partition)

Page 45: Ordenacion

Programación II

Ordenación Rápida (Quicksort)

• La estimación de la complejidad del

algoritmo es O(n log n). El mejor escenario se da cuando la función Findpivot divide

el conjunto en dos partes de igual tamaño.

• Un peor escenario se tiene cuando los

valores del pivote se seleccionan

aleatoriamente (caso inusual). De ser así el

algoritmo es O(n2).