可能是重复的问题:
为什么Java数组使用两种不同的排序算法来处理不同类型的数据?
我在阅读关于各种排序实现的Arrays doc时,注意到有些实现使用了调整后的快速排序,而另一些则使用了修改后的归并排序。为什么会存在这样的差异呢?
谢谢!
可能是重复的问题:
为什么Java数组使用两种不同的排序算法来处理不同类型的数据?
我在阅读关于各种排序实现的Arrays doc时,注意到有些实现使用了调整后的快速排序,而另一些则使用了修改后的归并排序。为什么会存在这样的差异呢?
谢谢!
在对原始类型的数组进行排序时,使用快速排序(Quicksort);而对于Object[]类型的数组,则使用归并排序(mergesort)。
使用归并排序来处理对象的主要原因是它是稳定的——它不会重新排列相等的元素:http://en.wikipedia.org/wiki/Sorting_algorithm#Stability
对于原始类型的排序来说,排序的稳定性是无意义的,因为你无法区分两个相等的值。因此,使用快速排序(除非是对一个对象数组进行排序,这时会使用归并排序)。此外,快速排序可以就地完成,因此无需分配另一个数组。