2012-04-20 12 views
9

Duplicar posible:
Why java Arrays use two different sort algorithms for different types?Java: Arrays.sort clasificación rápida y mergesort

Así que yo estaba leyendo las matrices doc sobre las diversas implementaciones de clasificación. Lo que noté fue que algunas implementaciones usaban una conexión rápida sintonizada mientras que otras usaban una combinación de rutas modificada. ¿Por qué la discrepancia?

Gracias!

+0

observado, gracias michael! – OckhamsRazor

Respuesta

18

Quicksort se utiliza para matrices de tipos primitivos, mientras que mergesort para Object [] arrays.

La razón principal por la mergesort se utiliza para los objetos que por fusión es estable - que no reordena los elementos que son iguales: http://en.wikipedia.org/wiki/Sorting_algorithm#Stability

Por primitivas la estabilidad de la especie no tiene sentido, ya que no puede distinguir dos valores que son igual. Por lo tanto, se usa quicksort (excepto cuando se ordena una matriz de Objetos, para lo cual se realiza mergesort). Además, el quicksort se puede realizar en su lugar, por lo que no es necesario asignar otro array.

+0

En el mundo de hoy, mergesort se ha convertido en el clasificador dominante, ya que se puede implementar para usar múltiples núcleos – ControlAltDel

+0

buen punto, pero JDK no usa esto por ahora. –

+5

Dicho esto, JDK 7 ya no usa mergesort, utiliza el mítico [TimSort] (http://en.wikipedia.org/wiki/Timsort). –

Cuestiones relacionadas