Mic*_*rdt 180
最可能的原因:快速排序不稳定,即同等条目可以在排序期间改变其相对位置; 除此之外,这意味着如果您对已经排序的数组进行排序,它可能不会保持不变.
由于原始类型没有标识(没有办法区分具有相同值的两个整数),这对它们无关紧要.但对于参考类型,它可能会导致某些应用程序出现问题.因此,使用稳定的合并排序.
OTOH,不对原始类型使用(保证n*log(n))稳定合并排序的原因可能是它需要复制数组.对于引用类型,引用对象通常占用的内存比引用数组多得多,这通常无关紧要.但对于原始类型,克隆数组会使内存使用量翻倍.
Wil*_*rne 22
根据本答案中引用的Java 7 API文档,Arrays#Sort()
对象数组现在使用TimSort,它是MergeSort和InsertionSort的混合体.另一方面,Arrays#sort()
对于原始数组现在使用Dual-Pivot QuickSort.这些更改是从Java SE 7开始实现的.
kuk*_*ido 10
我在 Coursera 上的算法课和 Bob Sedgewick 教授的一次讲座中提到了 Java 系统排序的评估:
“如果程序员使用对象,也许空间不是一个非常重要的考虑因素,合并排序使用的额外空间可能不是问题。如果程序员使用原始类型,也许性能是最重要的,所以他们使用快速排序。”
归档时间: |
|
查看次数: |
37308 次 |
最近记录: |