如何在java中执行内存高效的数组排序?

时间:2011-05-13 02:37:01

标签: java algorithm sorting memory

我想在不使用[多]额外内存的情况下对大量字符串(特别是File.list())进行排序,我无法将其外化或进一步减少。

Arrays.sort()表示它进行了合并排序,并且wikipedia说某些实现分配原始数组的大小来存储排序的输出。 (这似乎得到了方法中System.arraycopy引用的支持。)

是否存在可以使用的就地排序算法,这种算法对内存有效吗?

3 个答案:

答案 0 :(得分:6)

快速入门非常快。请参阅here

答案 1 :(得分:5)

String在Java中是不可变的。因此,当您的问题中String的数组重复时,它们不需要像您期望的那样多的空间。实际上,开销可能非常小。

换句话说,Java的Arrays#sort()可以很好地解决您的问题。您可以自己测试一下表现。

对于问题的标题,Ankit的答案和dlev的答案都很好。

答案 2 :(得分:1)

您可以为就地排序编写堆排序算法。