¿Cuál es la diferencia entre quicksort y mergesort?

Ambos son algoritmos de clasificación basados ​​en la estrategia de dividir y conquistar.

Mergesort
El verdadero trabajo de mergesort se realiza mediante la operación de merge . Dadas dos sub-matrices ordenadas, que juntas tienen un total de n elementos, la operación de merge utiliza una matriz auxiliar de tamaño n para fusionarlas en una sola matriz ordenada en tiempo lineal, es decir, O (n) en notación Big Oh.

Al tener esta operación de fusión, mergesort funciona de la siguiente manera. Dada una matriz de elementos A, clasifica las sub-matrices izquierda y derecha usando mergesort en sí, y luego las combina en una sola matriz ordenada. El caso base es una sub-matriz de tamaño 1, que se ordena implícitamente por definición.

Si analizamos la complejidad temporal de mergesort, veremos que es O (n log n) en todos los casos. Es decir, el tiempo necesario para ordenar n elementos crece proporcionalmente a n log n. La ordenación por fusión también necesita una matriz adicional de tamaño n para la operación de fusión. Entonces su complejidad espacial es O (n) .

Ordenación rápida
Quicksort es otro algoritmo de clasificación de divide y vencerás, propuesto por CAR Hoare. Aquí, el caballo de batalla es la operación de partition . Dada una matriz de n elementos, la partition toma un elemento (conocido como pivote) y lo coloca en la posición correcta. Es decir, la matriz no se ordenará, pero todos los elementos inferiores al pivote estarán a la izquierda del pivote, y todos los elementos mayores que el pivote estarán a la derecha. La operación de partition se puede realizar en tiempo lineal.

Quicksort luego funciona de la siguiente manera. Primero, realiza la operación de partición en la matriz de entrada. Suponga que el pivote se coloca en la posición p . Ahora, la ordenación rápida clasifica las submatrices A [0: p – 1] y A [p + 1: n – 1], utilizando la ordenación rápida en sí. Aquí nuevamente, el caso base es una matriz de tamaño 1.

Hay varias formas de seleccionar el pivote. Lo más simple es simplemente tomar el elemento más a la izquierda como pivote. Pero, esto lleva a una debilidad fatal. En este caso, si la matriz ya está ordenada, el pivote se colocará siempre en la posición más a la izquierda, y quicksort ordenará sublistas de tamaño 0 yn – 1. Esto lleva a una complejidad temporal de [matemáticas] O (n ^ 2) [/ math], que no es mejor que el tipo de burbuja.
Esto puede mitigarse eligiendo un elemento aleatorio como pivote o utilizando la mediana de tres elementos. En este caso, el peor de los casos de [matemáticas] O (n ^ 2) [/ matemáticas] es extremadamente improbable (límite imposible).

En el mejor de los casos, cuando el pivote siempre se coloca en el medio, la complejidad del tiempo será O (n log n) . Además, si el pivote siempre se coloca en algún lugar en la parte media del 50% (25% – 75%) de la matriz, la ordenación rápida tomará un tiempo proporcional a O (n log n), incluso en el mejor de los casos.

La mayor ventaja de la clasificación rápida es que, aunque las complejidades asintóticas son O (n log n) , el multiplicador constante (oculto por la notación Big Oh) es mucho más pequeño para la clasificación rápida, que posteriormente es apreciablemente más rápida que la combinación en casi todos los casos. .

En cuanto a la complejidad del espacio, la complejidad del espacio de la clasificación rápida es O (log n), teniendo en cuenta el espacio de pila utilizado para la recursividad.

Además, quicksort no se puede implementar de forma iterativa, a diferencia de mergesort, donde es posible una implementación iterativa, a veces llamada mergesort de abajo hacia arriba .

Ambos usan la estrategia Divide y vencerás.

Pero las diferencias son

  1. La ordenación rápida es un algoritmo EN EL LUGAR, mientras que la ordenación por fusión no lo es.

Significa que la ordenación rápida no requiere memoria adicional durante la ejecución. Simplemente clasifica todo en la matriz donde están presentes los elementos sin clasificar. Mientras que la ordenación por fusión requiere memoria adicional (mucha memoria si la matriz es grande). Y la cantidad de memoria adicional requerida es Big-Oh (n), lo que significa que es directamente proporcional al tamaño de entrada n.

2. La ordenación rápida NO es un algoritmo de ordenación estable mientras que Merge lo es.

Un algoritmo de clasificación se llama estable si conserva el orden de aparición de los elementos en la matriz sin clasificar.
Por ejemplo si tengo
A = (1,4), (2.5), (7,2), (2,3), (8,1) como algunas coordenadas x e y. Y si tengo que ordenarlos con un orden creciente de coordenadas x, una ordenación estable los ordenaría como

(1,4), (2,5), (2,3), (7,2), (7,8)

La ordenación rápida no es estable porque intercambia los elementos no adyacentes. Por lo tanto, no se cuida la preservación del orden. El resultado puede ser estable o inestable. Mientras Merge es un tipo estable.

Es probable que la ordenación rápida se ejecute de 1.2 a 1.4 veces más rápido que la ordenación por fusión. Siempre es una buena opción usar Quick over merge si no se requiere estabilidad.
Además, una buena implementación de Quick sort es más fácil de codificar que una buena implantación de Merge sort.

Aunque el peor caso de tiempo de ejecución de QuickSort es Big-oh (n ^ 2), siempre se evita usar una versión aleatoria de clasificación rápida.

Espero que ayude.
Buena suerte.

Hay exactamente dos formas de aprender algoritmos de clasificación:
1. Comprender la forma fundamental en que se comparan los elementos (en el caso de una ordenación basada en la comparación, como la ordenación rápida y la fusión) y se intercambian.
2. Memorizar todo el código para que pueda escribirlo cuando sea necesario

La segunda opción siempre está disponible si encuentra que la codificación es difícil. Sin embargo, la primera opción siempre se recomienda si eres un estudiante de Ciencias de la Computación o consideras este campo como una opción futura.

Entonces, si intenta ver el procedimiento de trabajo básico de los algoritmos, usted mismo detectará las diferencias, y por diferencias quiero decir MUCHAS DIFERENCIAS, y por lo tanto su pregunta en ese caso en realidad no es una pregunta válida, o no tipo de pregunta que le haces a la gente!

Esto es, en resumen, cómo funciona la clasificación por fusión …
Una matriz sin clasificar determinada se DIVIDE primero hasta que alcancemos el nivel elemental de tener una matriz de un elemento y esta matriz obviamente se ordenará. Por lo tanto, hemos CONQUISTADO la matriz, es decir, hemos ordenado la matriz en su nivel elemental. Ahora tenemos que COMBINAR cada una de esas matrices desintegradas individualmente ordenadas para recuperar nuestra matriz original de tal manera que se clasifique. Para obtener un pseudocódigo detallado para el procedimiento anterior, puede buscar cualquier libro de algoritmos estándar, lo que se recomienda es Introducción al algoritmo por CLRS.

Ahora ordenación rápida …
En lugar de entrar en detalles, es suficiente decir que la ordenación rápida se basa completamente en una subrutina de partición, y el método de partición más popular utilizado es la partición Hoare. Nuevamente, el libro mencionado anteriormente dará detalles de esta subrutina de partición.

Además del libro, también puede visitar este sitio.
visualizar estructuras de datos y algoritmos a través de animaciones
que proporciona una visión visual de los diversos intercambios y comparaciones para cada algoritmo de clasificación.

Ahora para responder la pregunta en una oración: “La diferencia entre quicksort y mergesort es que son simplemente dos algoritmos diferentes”.

La clasificación rápida y la clasificación de combinación son dos algoritmos de clasificación conocidos que se utilizan en lenguajes de computadora.

Ambos algoritmos de clasificación tienen un Big O promedio de “n log n”, donde n es el número de elementos que se ordenarán. Ambos también tienen algoritmos de clasificación que adoptan un enfoque similar a una configuración de “divide y vencerás”. Sin embargo, ambos algoritmos de clasificación son bastante diferentes.

La clasificación de combinación a veces se conoce como clasificación externa. Este algoritmo de clasificación generalmente se requiere al ordenar un conjunto que es demasiado grande para contener o manejar en la memoria interna. Básicamente, la ordenación de fusión dividirá el conjunto en varios subconjuntos de un elemento y luego fusionará repetidamente los subconjuntos en subconjuntos cada vez más grandes con los elementos ordenados correctamente hasta que quede un conjunto. Por lo general, este método significa que la clasificación real en última instancia solo se ocupa de partes del conjunto completo.

La ordenación rápida funciona de manera bastante diferente a la ordenación por fusión. En muchos casos, la implementación de la Clasificación rápida a menudo produce una clasificación más rápida que otros algoritmos de clasificación Big O “n log n”. La ordenación rápida funciona seleccionando un solo elemento del conjunto y etiquetándolo como pivote. Luego, el conjunto se reordena para garantizar que todos los elementos de menor valor que el pivote se presenten antes y todos los elementos de mayor valor vengan después. Esta operación se aplica de forma recursiva a los subconjuntos en ambos lados del pivote hasta que todo el conjunto se haya considerado, ordenado.

Aquí hay un video interesante que compara la clasificación de fusión con la clasificación rápida

la ordenación por fusión no es una ordenación estable, es decir, necesita capacidad externa O (n) para realizar la consolidación.
La clasificación rápida es estable. Entonces, si la memoria está restringida, utilice la ordenación rápida.

En la ordenación por fusión, se requiere un espacio adicional para la matriz ordenada fusionada
En la clasificación rápida, no requiere un espacio extra
Ambos tienen complejidad de tiempo O (n log n)
Pero la eficiencia de Quick Sort está determinada por el elemento pivote elegido

Solo da 7 + 5 = 12 minutos y lo obtendrás 🙂

Ordenar fusión:

Ordenación rápida:

Ambos son algoritmos de estilo de divide y vencerás que logran el tiempo de ejecución que logran al aprovechar el hecho de que algunas operaciones se pueden realizar en tiempo lineal.

La diferencia entre los dos es básicamente qué operación lineal aprovechan. QuickSort es eficiente porque puede dividir una lista en elementos anteriores y elementos posteriores a un elemento determinado en tiempo lineal. MergeSort es eficiente porque, dado dos listas ya ordenadas, puede combinar las dos y mantener el orden ordenado en tiempo lineal.

Además de la elección del valor de pivote requerido en quicksort, la otra diferencia es que la complejidad temporal de quicksort es n log n donde la base si el logaritmo depende de la elección del pivote. Mientras que para un tipo de fusión, la complejidad del tiempo es independiente de los datos y siempre es n log n (log to the base 2 always), ya sea el peor, el mejor o el caso promedio.

1) La clasificación rápida clasifica los elementos en su lugar, es decir, no requiere ningún espacio adicional, mientras que la clasificación por fusión requiere un ritmo adicional para la clasificación.

2) En Merge, el elemento pivote de clasificación es siempre el elemento medio (casi medio), pero en la clasificación rápida podemos tomar el primer elemento como pivote, o el último elemento como pivote o el elemento medio como pivote.
En algunos casos tomamos elementos aleatorios como pivote es VERSIÓN ALEATORIA DE CLASIFICACIÓN RÁPIDA.

Espero que te sea útil …

1)
Estadísticamente, tanto MergeSort como QuickSort tienen el mismo tiempo de caso promedio: O (nlog (n)); Sin embargo, hay varias diferencias.

La mayoría de las implementaciones de Mergesort requieren espacio adicional para scratch, lo que podría afectar el rendimiento. Las ventajas de Mergesort son: es un tipo estable y no existe el peor de los casos.

Quicksort a menudo se implementa en el lugar, ahorrando así el rendimiento y la memoria al no crear espacio de almacenamiento adicional. Sin embargo, el rendimiento cae en listas ya ordenadas / casi ordenadas si el pivote no es aleatorio

Leer más: http://wiki.answers.com/Q/Betwee
2)
Entre esos tres, puede descartar automáticamente la clasificación de burbujas como la peor en casos generales (en realidad funciona bastante bien cuando la lista de números ya está en orden, a diferencia de la clasificación rápida).

En general, la ordenación combinada es O (n log n) y la ordenación rápida es O (n log n). Las dos diferencias principales son que 1) la ordenación rápida puede tener una degradación en el rendimiento si el punto de pivote se elige mal (O (n2)), 2) la ordenación rápida no requiere el almacenamiento adicional que sí requiere la ordenación por fusión.

Si bien no soy un experto en algoritmos, sé que la mayoría de las personas tienden a equivocarse al usar la ordenación rápida. Nunca he visto a nadie implementar un tipo de fusión cuando tenían una opción.

Leer más: http://wiki.answers.com/Q/Betwee

Estadísticamente, aunque tanto MergeSort como QuickSort tienen el mismo tiempo de caso promedio: O (nlog (n)); Sin embargo, hay varias diferencias que se discuten aquí @ 1. ¿Cuál es la diferencia entre quicksort y mergesort?

¿Alguien puede decir la diferencia exacta entre estos dos tipos … ????

ordenar por fusión: primero clasificaremos las listas más pequeñas y luego las fusionaremos en una lista ordenada más grande
mientras que la ordenación rápida -partición recursiva seguida de la ordenación recursiva

More Interesting

¿Cuándo debo usar un árbol de sufijos sobre una matriz de sufijos?

¿Es posible aprender estructuras de datos y algoritmos en un mes?

¿Qué temas de geometría y álgebra son importantes para concursos de programación como ICPC?

¿Qué debo usar para reducir los atributos en mi conjunto de datos, PCA o algoritmos de selección de características?

¿Cuál es una buena manera de ordenar temas en términos de qué aprender primero para la programación competitiva?

La inmutabilidad es primordial en la mayoría de los dominios de FP, pero ¿hacen copias superficiales o profundas?

Tengo un examen de matemáticas discreto y esto está en él. ¿Cuál es la fórmula recursiva de an = an-1 + 2?

¿Cuál es la diferencia entre recursividad e iteraciones brevemente?

Cómo identificar la recursividad en un problema de programación

Soy bueno en algoritmos y estructuras de datos, ¿cuál debería ser mi estrategia para comenzar una carrera independiente en este dominio?

¿Cuál es el programa de clasificación rápida que tiene su mediana como pivote?

¿Cuál es el número mínimo y máximo de materias que ofrece un estudiante en una escuela secundaria estadounidense?

¿Qué algoritmos debo saber para desarrollar una aplicación web sin conexión primero?

¿Cuándo Quicksort tiene su peor complejidad de tiempo de caso?

¿Puede alguien ayudarme a preparar un plan para preparar estructuras de datos y algoritmos en un mes de tiempo desde el punto de vista de las entrevistas?