¿Por qué Java utiliza Merge Sort para ordenar una matriz mayor que los elementos 7?

De acuerdo con Wikipedia :

"En Java, los métodos Arrays.sort () utilizan la ordenación por fusión o una ordenación rápida ajustada según los tipos de datos y para la eficiencia de implementación, cambie a la ordenación por inserción cuando se ordenan menos de siete elementos de la matriz"

¿Pero por qué? Tanto la ordenación por fusión como la ordenación rápida son O (n log n) .

Respuesta 1

No es tan ad-hoc:

El método de ordenación de Arrays.java usa la ordenación rápida para matrices de primitivas y la ordenación por fusión para matrices de objetos.

¿Por qué el método Arrays.sort de Java usa dos algoritmos de clasificación diferentes para diferentes tipos?

Además, según los documentos:

Por ejemplo, el algoritmo utilizado por sort (Object []) no tiene que ser un mergesort, pero sí debe ser estable.

Y otra cita del javadoc:

Se garantiza que este orden será estable: los elementos iguales no se reordenarán como resultado del orden.

Nota de implementación: Esta implementación es un mergesort estable, adaptativo e iterativo que requiere mucho menos que n lg (n) comparaciones cuando la matriz de entrada está parcialmente ordenada, al tiempo que ofrece el rendimiento de un mergesort tradicional cuando la matriz de entrada se ordena aleatoriamente. Si la matriz de entrada está casi ordenada, la implementación requiere aproximadamente n comparaciones. Los requisitos de almacenamiento temporal varían desde una pequeña constante para matrices de entrada casi ordenadas hasta n / 2 referencias de objetos para matrices de entrada ordenadas aleatoriamente.

La implementación aprovecha por igual el orden ascendente y descendente en su matriz de entrada, y puede aprovechar el orden ascendente y descendente en diferentes partes de la misma matriz de entrada. Es adecuado para fusionar dos o más matrices ordenadas: simplemente concatene las matrices y clasifique la matriz resultante.

La implementación se adaptó del tipo de lista de Tim Peters para Python (TimSort).

Respuesta: 2

Quicksort y mergesort son O (n log n) en rendimiento promedio . En el peor de los casos, la clasificación rápida es O (n ^ 2).

Respuesta: 3

Se trasladaron a la ordenación de fusión sintonizada porque descubrieron que, estadísticamente, para conjuntos de datos parcialmente ordenados reales, este método puede ser un poco más rápido que la ordenación rápida.

Respuesta: 4

Quiero saber si el uso de código específico de Java rompe o no la utilidad multiplataforma. Por ejemplo, ¿importa si uso Java ArrayList o Libgdx Array?

Quiero escribir un programa que simule lo siguiente: tengo 6 dados, y ruedo con algunos dados cada vez. Cuando no saco un dado, asumo que saqué un 0 con eso. Quiero enumerar ...

Actualmente estoy experimentando con arrastrar y soltar usando Java 7 Update 21. Mis sistemas operativos de destino son: Windows 7 Ubuntu 12.04 Mac OSX 10.6 / 10.8 Los requisitos son: arrastrar archivos desde ...

¡Buen día! Soy un principiante en programación y he estado trabajando en un programa. Utiliza import java.util.Random porque quiero que mis preguntas aparezcan al azar sin ningún orden en particular. Pero el problema y ...