我要使用功能
public static void sort(Object[] a)
要对一个int数组进行排序,但是我不确定该如何做,以便我可以肯定地确定它正在使用合并排序,而不是其他任何排序。
以下是Java文档:https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html
下面是我认为该功能的正确实现,以便使用合并排序。
public static void main(String[] args) {
int arr[] = { 3, 2, 4, 1, 99, 30, 5, 3 };
Arrays.sort(arr);
}
这是正确的吗?进一步,我想从
指定从何处开始排序的索引sort(Object[] a, int fromIndex, int toIndex)
我如何确保编写代码,使其使用合并排序而不是快速排序。
答案 0 :(得分:1)
Arrays.sort方法通常对基元数组使用“快速排序”,对对象数组使用“合并排序”。
因此,为了使用合并排序,我想您必须将您的数组声明为Integer对象数组,例如
// Unsorted array
Integer[] a = { 2, 6, 3, 5, 1 };
答案 1 :(得分:0)
不幸的是,Arrays.sort同时使用了两者!看来,对于您的整数实现,它使用quicksort。
答案 2 :(得分:0)
dst = Time.zone.now.dst?
offset = Time.zone.utc_offset
offset += 3600 if dst
ts = (schedule.start_date.to_i + offset) * 1000
类中封装的Arrays实用程序类中有一个传统的Merge Sort实现。
默认情况下,Arrays.sort不会使用它。因此,您需要指示jvm使用它。这是根据Java文档:
LegacyMergeSort
系统属性为 Old merge sort implementation can be selected (for
compatibility with broken comparators) using a system property.
,您可以使用java.util.Arrays.useLegacyMergeSort=true
或java -Djava.util.Arrays.useLegacyMergeSort=true jar
来设置它