Está en la página 1de 27

UJCV

INFORME MERGE SORT

GRUPO # 2

Estructuras de datos y algoritmos

INGENIERO:

Mauricio José Mendoza.

INTEGRANTES:

- Hasly J. Meza. (2019130041)

- Eduardo J. Barillas. (2019110246)

-Ricardo M. Hepburn. (2019110024)

-Mauricio D, Medina. (2018120168)


TABLA DE CONTENIDO.

Contenido N ° página
I.Introducción.....................................................................1

II.Objetivos..........................................................................2

III.Marco teórico.
A. Método de ordenación, ¿Qué es Merge Sort?.........3
B. Historia.........................................................................4
C. Tipos de métodos.......................................................5-11
D.Utilidad de merge Sort...............................................12-18
E.Ventajas, desventajas y caracteristicas.....................19

IV.Desarrollo......................................................................20-22
A.Prueba de escritorio gráfica.......................................23

V.Conclusión......................................................................24

VI.Bibliografía....................................................................25
1

INTRODUCCIÓN.

En este informe, daremos a conocer uno de los algoritmos para


ordenamiento.. por mezcla, hablaremos de (MERGESORT) el cual este es
un algoritmo de ordenamiento externo establecido y basado en la técnica
de dividir y vencerás, ahora, en este informe hablaremos tanto, de a que
subjetividad nuestra es el mergesort, así como dar una definición clara y
objetiva en su totalidad sobre su función, sus métodos, su manera de
empleo, y los cons y pros que este algoritmo tiene, además, daremos
detalles, y ejemplos en vivo para ver su función y explicación del mismo.
2

OBJETIVOS.

Objetivo General.

1.Conocer acerca del método de merget sort, sus variantes en la


programación, características, utilidad, procesos.

Objetivos Específicos.

1.Conocer a detalle el funcionamiento de método de merget sort.

2.Llegar a resolver problemas con dicho método.

3.Saber diferenciar entre otros métodos.


3

MERGE SORT.
MÉTODO DE ORDENACIÓN:

Método de ordenación MergeSort

¿Qué es MergeSort?
Mergesort es un algoritmo de tipo ‘Divide y vencerás’. Divide el array en dos mitades
recursivamente, se llama a sí mismo para las dos mitades y después una las dos
mitades ordenadas.
El vector de datos se divide a sí mismo hasta alcanzar el tamaño ‘1’ de elementos, eso
quiere decir que el vector de tamaño 1 está ordenado. Cuando el vector se encuentre
en esta parte cada sub-vector se ordena recursivamente ‘uniéndolos’ y comparando
valores con el vector de al lado.

De forma resumida el funcionamiento del método MergeSort es el siguiente:


- Si la longitud del array es menor o igual a 1 entonces ya está ordenado.
- El array a ordenar se divide en dos mitades de tamaño similar.
- Cada mitad se ordena de forma recursiva aplicando el método MergeSort.
4

MERGE SORT.
HISTORIA:

A finales del Siglo pasado, una prestigiosa Consultora publicó un estudio que había
realizado para averiguar en qué se consumía la CPU de los ordenadores de las
empresas. Sospecho que sobre todo, basó su estudio en clientes con mainframes de
IBM, aunque sólo sea por lo sencillo que es en estos sistemas conocer con exactitud,
gracias al RMF, lo que consume cualquier programa a lo largo del tiempo.
A pocos entendidos sorprendió que el programa que más recursos consumiera fuera
el Sort (es decir, el programa standard para ordenar los registros de un fichero, Base de
Datos, etc), pero lo chocante fue hasta qué punto lo era: alrededor del 60% de todos
los recursos de los ordenadores centrales de las compañías se destinaban a ordenar
las cosas (hablo de memoria, porque no he conseguido encontrar el documento ni
vivo ni muerto, ni en papel ni en la red).
No debería, en realidad, resultarnos nada sorprendente: lo que los anglosajones llaman
“Computer” (artefacto para hacer cálculos), para franceses y españoles es un
“Ordenador” (cacharro para ordenar cosas).
Por cierto, el término computer lo aplicaban los anglosajones para designar a las
personas que “computaban” una serie de cálculos con una calculadora (calculator). A
partir de principios de los cincuenta del siglo pasado, los modernos sistemas fueron
reemplazando paulatinamente a los computers humanos, que no sólo se quedaron
sin trabajo, sino que también les canibalizaron el nombre…
En fin, el Sort es el programa para ordenar ficheros en todo Sistema Operativo que se
precie. Y, que yo sepa, en todos ellos se llama igual: SORT. Desde el B1 del NCR Century
200, hasta el MS/DOS, pasando por el MVS, etc.
Toma un fichero (o varios) de entrada, lo clasifica por las claves que se le indican (o por
todo el contenido del registro, si no se especifica nada), de forma ascendente o
descendente… Y además, en algunos Sistemas como MVS, el propio programa sirve
para hacer tratamientos a los ficheros: Unificar ficheros, Dividirlo en varios, Extraer
registros… un programa muy completo. Y que se usa muchísimo.
5

MERGE SORT.
TIPOS DE MÉTODOS:

Bublesort : por selección o burbuja.

■ Su tiempo de ejecución es O(N 2 ) para el mejor, peor y caso promedio.


■ Es el más fácil de codificar de los mostrados en este documento.
■ Si el array de datos es A y su tamaño es N, lo que hace el algoritmo, para cada i de
[0..N-
2] es intercambiar A[i] con el mínimo elemento del subarray [A[i+1], ..., A[N]].
■ Dado que es muy simple de codificar, aunque no tiene los mejores tiempos de
ejecución,
es apropiado utilizarlo para arrays de datos relativamente pequeños.

Por Inserción: Sea A el array a ordenar con N elementos. El algoritmo consiste en


recorrer todo
el array A comenzando desde la posición p=2 y terminando en p=N. Para cada p, se
trata de
ubicar en el lugar correcto el elemento A[p] en entre los elementos anteriores: A[p-1],
A[p-2], ...,
A[0]. Dada la posición actual p, el algoritmo se basa en que los elementos A[0], A[1], ...,
A[p-1]
ya están ordenados.
6

MERGE SORT.
TIPOS DE MÉTODOS:

Shell sort :
❏ A diferencia del algoritmo de ordenación por inserción, este algoritmo intercambia
elementos distantes. Es por esto que puede deshacer más de una inversión en cada
intercambio, hecho del cual nos aprovechamos para ganar velocidad.

❏ La velocidad del algoritmo dependerá de una secuencia de valores (llamados


incrementos, de los cuales hablaremos más abajo) con los cuales trabaja utilizándolos
como distancias entre elementos a intercambiar. Veremos que con algunas
secuencias podremos obtener ordenes de tiempo de ejecución en el peor caso de
O(n2), O(n^(3/2)) y
O(n^(4/3)).

❏ Se considera la ordenación de Shell como el algoritmo más adecuado para ordenar


entradas de datos moderadamente grandes (decenas de millares de elementos) ya
que su velocidad, si bien no es la mejor de todos los algoritmos, es aceptable en la
práctica y su implementación (código) es relativamente sencillo.

Heap sort: por montículos.

❏ Es un algoritmo que se construye utilizando las propiedades de los montículos


binarios.
❏ El orden de ejecución para el peor caso es O(N·log(N)), siendo N el tamaño de la
entrada.
❏ Aunque teóricamente es más rápido que los algoritmos de ordenación vistos hasta
aquí,
en la práctica es más lento que el algoritmo de ordenación de Shell utilizando la
secuencia de incrementos de Sedgewick.
7

MERGE SORT.
TIPOS DE MÉTODOS:

Quicksort: por partición.


El método Quick Sort es actualmente el más eficiente y veloz de los método de
ordenación
interna. Es también conocido con el nombre del método rápido y de ordenamento
por partición.
Este método es una mejora sustancial del método de intercambio directo y recibe el
nombre de Quick Sort, por la velocidad con la que ordena los elementos del arreglo.
Quicksort es un algoritmo basado en la técnica de divide y vencerás, que permite, en
promedio, ordenar n elementos en un tiempo proporcional a n log n. el algoritmo de
ordenación de Shell utilizando la secuencia de incrementos de Sedgewick.

Merge Sort: por intercalación.

■ Es una aplicación clásica de la estrategia para resolución de algoritmos "divide


y vencerás". Esta estrategia plantea el hecho de que un problema puede ser
dividido en varios subproblemas y una vez resueltos estos se puede proceder a unir las
soluciones para formar la solución del problema general. La solución de los
subproblemas más pequeños se realiza de la misma manera: es decir, se van
resolviendo problemas cada vez más pequeños (hasta encontrarnos con un caso base:
problema no divisible con solución tribial).

■ En cada recursión se toma un array de elementos desordenados. Se divide en dos


mitades, se aplica la recursión en cada una de estas y luego (dado que al finalizar estas
recursiones tenemos las dos mitades ordenadas) se intercalan ambas para obtener el
array ordenado.
8

MERGE SORT.
TIPOS DE MÉTODOS:

Pasos para realizar mergesort:


MergeSort(arr[], l, r)
if r > 1
1. Encuentra el punto medio para dividir el array en dos mitades:
2. middle m = (1+r) / 2
3. Llama a mergeSort para la primera mitad:
4. Llama a mergeSort(arr, l, m)
5. Llama a mergeSort para la segunda mitad:
6. Llama a mergeSort(arr, m+1, r)
7. Une las dos mitades ordenadas en el paso 2 y 3:
8. Llama a merge(arr, l, m, r).

Implementación en Java.
9
MERGE SORT.
TIPOS DE MÉTODOS:

Método sort(), ésta función tiene la tarea de dividir en dos mitades el vector
que se pasa por parametro hasta que el vector se quede de tamaño 1.
10
MERGE SORT.
TIPOS DE MÉTODOS:

método merge() el cuál recibirá por parámetro el vector, la posición de la


izquierda, la posición del medio y la posición final(right).
11
MERGE SORT.
TIPOS DE MÉTODOS:

Ya por ultimo el método de utilidad que nos imprime el vector.


12

MERGE SORT.
UTILIDADES DE MERGE SORT:

Como estamos usando divide y vencerás para ordenar, tenemos que decidir cómo se
van a ver nuestros subproblemas. El problema completo es ordenar todo un arreglo.

Digamos que un subproblema es ordenar un subarreglo. En particular, vamos a pensar


que un subproblema es ordenar el subarreglo que empieza en el índice ppp y va hasta
el índice rrr. Será conveniente tener una notación para un subarreglo, así que digamos
que array[p..r] denota este subarreglo de array..
Aquí está cómo el ordenamiento por mezcla utiliza divide y vencerás:
(khanacademy.org, s.f.)

I. Divide: al encontrar el número de la posición a medio camino entre ppp y rrr. Haz
este paso de la misma manera en que encontramos el punto medio en la búsqueda
binaria: suma ppp y rrr, divide entre 2 y redondea hacia abajo.

II. Vence: al ordenar de manera recursiva los subarreglos en cada uno de los dos
subproblemas creados por el paso de dividir. Es decir, ordena de manera recursiva el
subarreglo array[p..q] y ordena de manera recursiva el subarreglo array[q+1..r].

III. Combina: al mezclar los dos subarreglos ordenados de regreso en un solo


subarreglo ordenado array[p..r].
Así es cómo se desarrolla todo el algoritmo del ordenamiento por mezcla:
13

MERGE SORT.
UTILIDADES DE MERGE SORT:
14

MERGE SORT.
UTILIDADES DE MERGE SORT:

La mayoría de los pasos en un ordenamiento por son sencillos. Puedes comprobar el


caso base de manera sencilla. Encontrar el punto medio qqq en el paso de dividir
también es muy fácil. Tienes que hacer dos llamadas recursivas en el paso de vencer.
En el paso de combinar, en donde tienes que mezclar los dos arreglos ordenados, es
en donde se hace el trabajo de verdad.

Prácticamente la función mergeSort() es la que se encarga de ir dividiendo el arreglo


hasta su más mínima expresión mientras que la funcion merge() es la que va
realizando el orden haciendo uso de las mezclas.

Este es nuestro inicio ya que es la primera función llamada, notamos como esta tiene
una pequeña condicional necesaria para toda función recursiva.
15

MERGE SORT.
UTILIDADES DE MERGE SORT:

y como también hace referencia a si misma mientras hace el llamado a la función de


mezclas.

Ya una vez hemos mandado a llamar la función que se encargará de las mezclas
podemos ver cómo se va realizando las comparaciones para ir llenando un arreglo
consolidado el cual hemos nombrado result
16

MERGE SORT.
UTILIDADES DE MERGE SORT:

Usemos de ejemplo el siguiente arreglo [9,8,7,6] el cual luego de ser ordenado de


mayor a menor quedara de la siguiente forma [6,7,8,9]
en el primer llamado queda de la siguiente forma.

Antes de entrar a la función merge() debe entrar nuevamente a la función mergeSort()


por lo que ambos arreglos se volverán a dividir.

Esta vez tenemos 2 arreglos de longitud 1, eso da los parámetros exactos para poder
llamar la función merge() el cual compara ambos elementos de arreglo e introducirá
el menor en nuestro arreglo auxiliar result
17

MERGE SORT.
UTILIDADES DE MERGE SORT:

Una vez tenemos el menor, concatenamos este nuevo arreglo con los elementos
restantes y los retornamos.

Tendremos el siguiente retorno.


18

MERGE SORT.
UTILIDADES DE MERGE SORT:

Lo mismo aplicará para el arreglo proveniente de la derecha.

Si notamos bien, a este punto ya tenemos 2 arreglos separados cada uno ordenado de
menor a mayor.
Arreglo 1
14
[8,9]
Arreglo 2
[6,7]
19
MERGE SORT.
VENTAJAS, DESVENTAJAS Y
CARACTERISTICAS:

Ventajas:

·Método de ordenamiento estable mientras la función de mezcla sea implementada


correctamente.
·Muy estable cuando la cantidad de registros a acomodar es de índice bajo, en caso
contrario gasta el doble del espacio que ocupan inicialmente los datos.
·Efectivo para conjunto de datos a los que se puede acceder secuencialmente
(arreglos, vectores, etc.)

Desventajas:

·Principal desventaja: está definido recursivamente. Si se deseara implementarla no


recursivamente se tendría que emplear una pila y se requeriría un espacio adicional de
memoria para almacenarla.

Características.
La eficiencia de este algoritmo es bastante notable en tiempo de ejecución en
comparación con otros, ya que su manera de trabajo por grupos pequeños agiliza la
organización de los datos. Su utilización se da con mucha frecuencia cuando la
cantidad de registros no es muy grande ya que para hacer las mezclas este método
utiliza el doble del espacio que gasta el arreglo original de valores. Este es un
algoritmo estable dependiendo de la forma en que se implemente, recursivo y por
tanto de complejidad o tanto en el peor caso como en el mejor o en el caso promedio
pues el tiempo que emplea no depende de la disposición inicial de los datos.

Otros datos
A diferencia de algunas versiones mejoradas del Quicksort, Mergesort es un método
estable de ordenamiento mientras la operación de mezcla sea implementada de la
manera correcta.
20

MERGE SORT.
DESARROLLO:

package hn.edu.ujcv.pii.p1;
import java.util.Scanner;

public class Main {

static Scanner teclado = new Scanner(System.in);

public static int[] MergeSort(int[] arreglo){


int largo = arreglo.length;
//Si el arreglo es de un solo elemento retornar el arreglo
if(largo == 1){
return arreglo;
}

//Separar el arreglo en dos sub arreglos


int mitad = largo/2;
int[] subArregloA = new int[mitad];
int[] subArregloB = new int[largo-mitad];
for (int i = 0; i < mitad; i++) {
subArregloA[i] = arreglo[i];
}
for (int i = 0; i < (largo - mitad); i++) {
subArregloB[i] = arreglo[mitad+i];
}

//Llamar a MergeSort recursivamente para que ordene cada sub arreglo


int[] ordenadoA = MergeSort(subArregloA);
int[] ordenadoB = MergeSort(subArregloB);
21

MERGE SORT.
DESARROLLO:

//Preparar el arreglo vacio que contendra el arreglo nuevo ordenado


int[] ordenado = new int[largo];

//variables de control del indice dentro de cada sub arreglo


int idxA = 0;
int idxB = 0;

for(int i=0; i<largo; i++){

if(idxA >= ordenadoA.length){ //Si ya se llego al final del sub arreglo A, entonces utilizar
unicamente el sub arreglo B
ordenado[i]=ordenadoB[idxB];
idxB++;
}else if(idxB >= ordenadoB.length){ //De lo contrario y Si ya se llego al final del sub
arreglo B, entonces utilizar unicamente el sub arreglo A
ordenado[i]=ordenadoA[idxA];
idxA++;
}else{
//Sino determinar que numero de los sub arreglos es el menor para ingresarlo al
arreglo destino
if(ordenadoA[idxA]<ordenadoB[idxB]){
ordenado[i] = ordenadoA[idxA];
idxA++;
}else{
ordenado[i] = ordenadoB[idxB];
idxB++;
}
}
}
22

MERGE SORT.
DESARROLLO:

return ordenado;
}

public static void main(String[] args) {


System.out.print("Ingrese el tamaño del arreglo: ");
int tam = teclado.nextInt();

int[] arr = new int[tam];


for (int i = 0; i < tam; i++) {
System.out.print("Ingrese el número [" + i + "]: ");
arr[i] = teclado.nextInt();
}
int[] ordenado = MergeSort(arr);
System.out.println("El arreglo ordenado por merge sort es: ");
for (int i = 0; i < arr.length; i++) {
System.out.print("[" + ordenado[i] + "]");
}
System.out.println();
}
}
MERGE SORT. 23

FORMA GRÁFICA:
24

CONCLUSIONES.

1.Conocimos acerca del método de merget sort, sus variantes en la programación,


características, utilidad, procesos.

2.Conocimos a detalle el funcionamiento de método de merget sort.

3.Desarrollamos proyecto con dicho método.

4.Diferenciamos entre otros métodos.

En conclusión permite facilitar el ordenamiento de grandes listas entrelazadas entre sí


aprendimos su sintaxis y cómo elaborarlo . Cabe resaltar que hay varios métodos de
ordenamiento pero sin duda alguna merge sort es un método muy sencillo y fácil de
utilizar.
25

BIBLIOGRAFÍA.

khanacademy.org. (s.f.). Merge Sort y su Utilidad. Obtenido de


khanacademy.org:
https://es.khanacademy.org/computing/computer-
science/algorithms/merge-sort/a/overview-of-merge-sort

http://puntocomnoesunlenguaje.blogspot.com/2014/10/java-
mergesort.html#:~:text=El%20método%20MergeSort%20es%20un,
la%20técnica%20divide%20y%20vencerás.&text=-
%20Cada%20mitad%20se%20ordena%20de%20forma%20recursiv
a%20aplicando%20el%20método%20MergeSort.

https://www.ecured.cu/MergeSort#:~:text=n%20log%20n).-,Mezcla
s%20Sucesivas%20(MergeSort),1945%20por%20John%20Von%20N
eumann.&text=Si%20n%20%3D%201%20solo%20hay,se%20orden
an%20de%20igual%20forma.

También podría gustarte