Está en la página 1de 7

Julio Cesar Vasquez Garcia

27.777.893

Universidad De Los Andes

Facultad De ingeniería

Programacion 3

Resumen Ordenamiento Lineal


En un escenario ideal, dado un arreglo de tamaño n. También se da que los elementos
de la matriz están en el rango de 0 a n 2 – 1. Si se usa un algoritmo de ordenamiento
convencional como el método de la burbuja, tomaría un tiempo de O (n ^ 2) ya que el
rango dado es de tamaño n ^ 2. En cambio usar cualquiera de los métodos ya
establecidos como Merge Sort , Heap Sort o Radix Sort tomaría tiempo O (nLogn).
Los cuales cumplirían con los tiempos establecidos para este tipo de ordenamiento.

Merge Sort

O ordenamiento por fusión, es un algoritmo basado en la teoría divide y vencerás.


Divide el arreglo de entrada en dos mitades, se llama a sí mismo para las dos
mitades y luego fusiona las dos mitades ordenadas. La función merge() se utiliza
para fusionar dos mitades, esta asume que están ordenados y fusiona los dos
subarreglos ordenados en uno solo. La función Mergesort() se llama a si misma para
dividir el arreglo hasta que el tamaño se vuelva 0.

Diagrama 1 (Proceso grafico ordenamiento por fusión)


Como se puede observar en el (diagrama 1) se muestra el proceso completo de
clasificación por fusión para una matriz de ejemplo {38, 27, 43, 3, 9, 82, 10}, se puede
ver que la matriz se divide recursivamente en dos mitades hasta que el tamaño se
convierte en 1. Una vez que el tamaño se convierte en 1, los procesos de fusión entran
en acción y comienzan a fusionar las matrices nuevamente hasta que la matriz
completa es fusionada.

imagen 2. función Merge

imagen 2. función MergeSort


Imagen 3. Main y llamado de funciones

Heap Sort

es una técnica de clasificación basada en la estructura de datos Binary Heap. Es


similar a la ordenación por selección donde primero encontramos el elemento
mínimo y colocamos el elemento mínimo al principio. Repetimos el mismo proceso
para los elementos restantes.

Un montón binario es un árbol binario completo donde los elementos se almacenan


en un orden especial de tal manera que el valor en un nodo principal sea mayor (o
menor) que los valores en sus dos nodos secundarios. El primero se llama max heap
y el segundo se llama min-heap. El montón se puede representar mediante un árbol
binario o un arreglo.

Dado que un montón binario es un árbol binario completo, se puede representar


fácilmente como un arreglo y la representación basada en la matriz es eficiente en
cuanto al espacio. Si el nodo padre se almacena en el índice I, el hijo izquierdo se
puede calcular por 2 * I + 1 y el hijo derecho por 2 * I + 2 (suponiendo que la indexación
comienza en 0).
imagen 4. a max heap

imagen 5. Swap and order

El proceso de reformar un árbol binario en una estructura de datos Heap se conoce


como 'heapify'. Un árbol binario es una estructura de datos de árbol que tiene dos
nodos secundarios como máximo. Si los nodos secundarios de un nodo están
'montados', entonces solo se puede aplicar el proceso 'montado' sobre ese nodo. Un
montón siempre debe ser un árbol binario completo.

A partir de un árbol binario completo, podemos modificarlo para convertirlo en Max-


Heap ejecutando una función llamada 'heapify' en todos los elementos que no son
hojas del montón. es decir, 'heapify' usa recursividad.
imagen 6. Eliminar ultimo nodo del heap

Se crea el max heap para ordenar los elementos en orden ascendente, una vez que
el heap este creado hacemos el intercambio entre nodos raíz vs el ultimo y se elimina
el ultimo nodo.

Este procedimiento se repite hasta que el heap quede con un solo elemento, que es
cuando el algoritmo termina y el arreglo queda ordenado.

Imagen 7. Código e implementación


Radix Sort

Si los elementos están en el rango de 1 a n^2 no podemos usar la ordenación por


conteo porque tomaría O(n^2 ), que es peor que los algoritmos de ordenación
basados en comparación. Por lo que para ordenar el arreglo en tiempo lineal Radix
Sort es la respuesta. La idea de Radix Sort es ordenar dígito por dígito comenzando
desde el dígito menos significativo hasta el dígito más significativo. Radix sort usa la
ordenación por conteo como una subrutina para ordenar.

El algoritmo de clasificación Radix

Haga lo siguiente para cada dígito i donde i varía del dígito menos significativo al
dígito más significativo.

Ordene la matriz de entrada utilizando la ordenación por conteo (o cualquier


ordenación estable) de acuerdo con el i-ésimo dígito.

Imagen 8. Ordenamiento

Como se observa en la imagen 8, el algoritmo permite analizar desde el numero


menos relevante al mas relevante, mediante esta selección va intercambiando las
posiciones, para efectos de este ejemplo fue necesario hacer uso del algoritmo 3
veces debido a que el numero mas grande tenia 3 dígitos, en la ultima fila se puede
apreciar el arreglo ordenado.
Imagen 9. Código e implementación

También podría gustarte