我知道Java的
我的问题是,在处理原始数据类型时,为什么Java不使用MergeSort保证的O(n log n)时间,而选择了平均O(n log n)时间的QuickSort?在相关答案之一的最后一段中here,解释了这一点:
Arrays.sort
方法在对对象数组(或对象集合)进行排序时使用MergeSort,因为它是稳定的;在对原始数据类型数组进行排序时,Java使用QuickSort,因为我们不需要稳定性,即两个相等的int是无法区分的,即它们的身份无关紧要。我的问题是,在处理原始数据类型时,为什么Java不使用MergeSort保证的O(n log n)时间,而选择了平均O(n log n)时间的QuickSort?在相关答案之一的最后一段中here,解释了这一点:
这是什么意思?克隆引用仍然至少与克隆原始类型同样昂贵。除了上述原因外,是否还有其他使用QuickSort(平均O(n log n))而不是使用MergeSort(保证O(n log n)时间)在原始数据类型数组上的原因?对于引用类型,所引用对象通常占用的内存远大于引用数组,这通常并不重要。但对于原始数据类型来说,克隆数组会直接使内存使用量翻倍。