Ordenacion
-
Upload
karlalopezbello -
Category
Documents
-
view
1.412 -
download
9
description
Transcript of Ordenacion
![Page 1: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/1.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/2.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/3.jpg)
Programación II
Introducción
![Page 4: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/4.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/5.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/6.jpg)
Programación II
Ordenación por Selección
![Page 7: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/7.jpg)
Programación II
Ordenación por Selección
![Page 8: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/8.jpg)
Programación II
Ordenación por Selección
![Page 9: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/9.jpg)
Programación II
Ordenación por Selección
• Ejemplo:
![Page 10: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/10.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/11.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/12.jpg)
Programación II
Ordenación de Burbuja
![Page 13: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/13.jpg)
Programación II
Ordenación de Burbuja
![Page 14: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/14.jpg)
Programación II
Ordenación de Burbuja
![Page 15: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/15.jpg)
Programación II
Ordenación de Burbuja
• Ejemplo:
![Page 16: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/16.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/17.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/18.jpg)
Programación II
Ordenación por Inserción
![Page 19: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/19.jpg)
Programación II
Ordenación por Inserción
![Page 20: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/20.jpg)
Programación II
Ordenación por Inserción
• Ejemplo:
![Page 21: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/21.jpg)
Programación II
Ordenación por Inserción
![Page 22: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/22.jpg)
Programación II
Ordenación por Inserción
• Ejemplo:
![Page 23: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/23.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/24.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/25.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/26.jpg)
Programación II
Ordenación por Incrementos (Shell-sort)
![Page 27: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/27.jpg)
Programación II
• Ejemplo:
Ordenación por Incrementos (Shell-sort)
![Page 28: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/28.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/29.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/30.jpg)
Programación II
Ordenación por Mezcla (Merge-sort)
![Page 31: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/31.jpg)
Programación II
Ordenación por Mezcla (Merge-sort)
![Page 32: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/32.jpg)
Programación II
Ordenación por Mezcla (Merge-sort)
• Ejemplo:
![Page 33: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/33.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/34.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/35.jpg)
Programación II
Ordenación por Montículos (Heapsort)
![Page 36: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/36.jpg)
Programación II
Ordenación por Montículos (Heapsort)
• Ejemplo:
![Page 37: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/37.jpg)
Programación II
Ordenación por Montículos (Heapsort)
• Ejemplo:
![Page 38: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/38.jpg)
Programación II
Ordenación por Montículos (Heapsort)
• Ejemplo:
![Page 39: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/39.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/40.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/41.jpg)
Programación II
Ordenación Rápida (Quicksort)
![Page 42: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/42.jpg)
Programación II
Ordenación Rápida (Quicksort)
![Page 43: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/43.jpg)
Programación II
Ordenación Rápida (Quicksort)
• Ejemplo:
![Page 44: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/44.jpg)
Programación II
Ordenación Rápida (Quicksort)
• Ejemplo:
(Partition)
![Page 45: Ordenacion](https://reader033.fdocuments.net/reader033/viewer/2022051312/546d87a1af795958298b54ee/html5/thumbnails/45.jpg)
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).