Está en la página 1de 4

MERGE SORT

José Meneses; C.I: 26.430.820


Sistemas y Algoritmos
Departamento de Computación.
Facultad Experimental de Ciencias y Tecnología.
Universidad de Carabobo.
Naguanagua, Venezuela.
Profesora: Luis Barrios

Algoritmo de Ordenamiento

Podemos representar los algoritmos de ordenamiento como una forma


de dar un orden a un cierto conjunto de elementos que no posea un grado de
organización establecida. Consideramos ordenar como el proceso de
reorganizar un conjunto de objetos en una secuencia determinada. El objetivo
de este proceso generalmente es facilitar la búsqueda de uno o más elementos
pertenecientes a un conjunto.

Los algoritmos de ordenamiento nos permiten ordenar vectores o


matrices con valores asignados aleatoriamente. Por lo general, todos los
algoritmos de ordenación funcionan de una forma similar. Toman una lista de
elementos, en nuestro caso un “array", comparan sus elementos con una
estrategia definida y, según el resultado de dicha comparación, mueven los
datos de un lugar a otro hasta conseguir una lista (array) final ordenado.

Una colección de datos (estructuras) puede ser almacenada en un


archivo, un array (vector o tabla), un array de registros, una lista enlazada o un
árbol. Cuando los datos están almacenados en un array, una lista enlazada o un
árbol, se denomina ordenación interna. Si los datos están almacenados en un
archivo, el proceso de ordenación se llama ordenación externa. Los métodos
(algotirmos) de ordenación son numerosos, por ello se debe prestar atención
en su elección.

Entre los más comunes se encuentra el Merge Sort.


Merge Sort

El algoritmo de ordenamiento por mezcla es un algoritmo de ordenamiento


externo estable basado en la técnica divide y vencerás. Divide la matriz de
entrada en dos mitades, se llama a sí misma para las dos mitades y luego
combina las dos mitades ordenadas. La función merge () se usa para fusionar
dos mitades. La combinación (arr, l, m, r) es un proceso clave que supone que
arr [l..m] y arr [m + 1..r] están ordenados y fusiona los dos sub-arrays
ordenados en uno. Vea la siguiente implementación de C para más detalles.

Ejemplo:

MergeSort(arr[], l, r)

If r > l
1. Encuentre el punto medio para dividir la matriz en dos mitades:

Medio m = (l+r)/2
2. Llame a MergeSort para la primera mitad:
Llame mergeSort(arr, l, m)
3. Llame a MergeSort para la segunda mitad:
Llame mergeSort(arr, m+1, r)
4. Combine las dos mitads ordenadas en los pasos 2 y 3:
Llame merge(arr, l, m, r)

El siguiente diagrama de Wikipedia muestra el proceso completo de


clasificación de fusión para una matriz de ejemplo {38, 27, 43, 3, 9, 82,
10}. Si echamos un vistazo más de cerca al diagrama, podemos 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 fusionarse de nuevo hasta que la matriz
completa esté fusionada.
Complejidad del tiempo
Clasificación de matrices en diferentes máquinas. Merge Sort es un
algoritmo recursivo y la complejidad del tiempo se puede expresar como la
siguiente relación de recurrencia.

La recurrencia anterior se puede resolver utilizando el método del árbol de


recurrencia o el método maestro. Cae en el caso II del Método Maestro y la

solución de la recurrencia es .

La complejidad de tiempo de Merge Sort es  en los 3


casos (peor, promedio y mejor) ya que la clasificación de fusión siempre
divide la matriz en dos mitades y toma tiempo lineal para fusionar dos
mitades.
Espacio auxiliar: O (n)
Paradigma algorítmico: divide y vencerás
Clasificación en el lugar: no en una implementación típica
Estable: sí

Aplicaciones de Merge Sort


1. Merge Sort es útil para ordenar listas vinculadas en tiempo O (nLogn)  .
En el caso de las listas vinculadas, el caso es diferente principalmente
debido a la diferencia en la asignación de memoria de las matrices y las
listas vinculadas. A diferencia de las matrices, los nodos de la lista
vinculada pueden no ser adyacentes en la memoria. A diferencia de una
matriz, en la lista vinculada, podemos insertar elementos en el medio en
O (1) espacio adicional y O (1) tiempo. Por lo tanto, la operación de
fusión de clasificación de fusión se puede implementar sin espacio
adicional para las listas vinculadas.

En las matrices, podemos hacer acceso aleatorio ya que los elementos


son contiguos en la memoria. Digamos que tenemos una matriz entera A (4
bytes) y que la dirección de A [0] sea x, entonces para acceder a A [i],
podemos acceder directamente a la memoria en (x + i * 4). A diferencia de las
matrices, no podemos hacer acceso aleatorio en la lista vinculada. La
ordenación rápida requiere mucho de este tipo de acceso. En la lista vinculada
para acceder al i-ésimo índice, tenemos que viajar todos y cada uno de los
nodos desde la cabeza hasta el i-ésimo nodo ya que no tenemos un bloque
continúo de memoria. Por lo tanto, la sobrecarga aumenta para quicksort. La
ordenación por fusión accede a los datos secuencialmente y la necesidad de
acceso aleatorio es baja.

2.Problema de recuento de inversiones

3.Utilizado en clasificación externa

También podría gustarte