使用数组库合并对一个int数组的排序

时间:2019-04-21 08:55:18

标签: java mergesort

我要使用功能

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)

我如何确保编写代码,使其使用合并排序而不是快速排序。

3 个答案:

答案 0 :(得分:1)

Arrays.sort方法通常对基元数组使用“快速排序”,对对象数组使用“合并排序”。

因此,为了使用合并排序,我想您必须将您的数组声明为Integer对象数组,例如

// Unsorted array
Integer[] a = { 2, 6, 3, 5, 1 };

答案 1 :(得分:0)

不幸的是,Arrays.sort同时使用了两者!看来,对于您的整数实现,它使用quicksort。

https://cafe.elharo.com/programming/java-programming/why-java-util-arrays-uses-two-sorting-algorithms/

答案 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=truejava -Djava.util.Arrays.useLegacyMergeSort=true jar来设置它