在Arrays类中,使用快速排序算法对原始数据类型进行排序,但对于对象排序,则使用归并排序算法。
我想知道这是为什么?
我想知道这是为什么?
使用归并排序的原因是要求一个稳定的算法,即相等的对象(通过compareTo()
或compare()
比较)在排序前后保持相同的相对顺序。
对于原始类型,相等意味着“不可区分性”。当对{5, 3, 5}
进行排序以得到{3, 5, 5}
时,不管哪个“5”先出现都没有关系。因此,可以在这里使用速度更快但不稳定的快速排序算法。
只是猜测,但最坏情况下快排是O(n ^ 2),而归并排序是稳定的(保证O(n log n))。
快速排序的最坏情况是由相等的值触发的...相等的原始类型是相同的,而“相等”的对象可能不是。
Arrays
的 javadoc 已经将这一点澄清了。 - Bozho