1. Presentación
Ordenación
Ing. Mauricio Paletta, Msc
INGENIERÍA EN INFORMÁTICA
Programación II
Coordinación General de Pregrado
UNIVERSIDAD NACIONAL EXPERIMENTAL DE GUAYANA
Programación II
2. 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.
Programación II
4. 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)
Programación II
5. 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.
Programación II
10. 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).
Programación II
11. 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.
Programación II
16. 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).
Programación II
17. 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.
Programación II
23. 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).
Programación II
24. 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.
Programación II
25. 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.
Programación II
28. 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)
Programación II
29. 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.
Programación II
33. 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).
Programación II
34. 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.
Programación II
39. 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.
Programación II
40. 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.
Programación II
45. 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).
Programación II