双精度有理数的最快排序算法

时间:2012-10-27 10:30:14

标签: java double sorting

我正在寻找在FFT变换后对数字进行排序的最快算法 - 只有abs中的实数。 value)=双精度的有理数,对于2 ^ 19个元素的1d数组。我认为这种排序最好......

5 个答案:

答案 0 :(得分:2)

如果您的问题是关于排序double[],请使用Arrays.sort。这是一个快速导航。

如果你拥有的是一个表示双精度分数的对象数组,那么该类需要实现Comparable,但是Arrays.sort(Object[])将最好地服务,它使用timsort(从Java 7开始)。但要小心,表现就在你手中:不要搞砸compareTo的实施。

答案 1 :(得分:0)

仅供Java7中的信息Arrays.sort使用Timsort

  

Timsort是一种混合排序算法,源自合并排序和插入排序,旨在很好地处理多种真实数据。它是由Tim Peters在2002年发明的,用于Python编程语言。该算法查找已经排序的数据的子集,并使用子集更有效地对数据进行排序。这是通过将已识别的子集(称为运行)与现有运行合并直到满足某些标准来完成的。从版本2.3开始,Timsort一直是Python的标准排序算法。它现在也用于在Java SE 7和Android平台上对数组进行排序。

答案 2 :(得分:0)

使用什么算法不仅取决于您要排序的对象类型,而取决于它们是如何混乱的。

请参阅http://www.sorting-algorithms.com/,了解不同标准算法在不同情况下的表现。

答案 3 :(得分:0)

如果您只是排序~1 / 200万个元素,那么您有很多选择。您可以使用您使用的任何语言包含的标准排序算法。

似乎元素之间会有很好的可变性,但我不确定FFT转换是否会生成具有大量已排序数字的数组。如果是这样,你会想要避免Quicksort。我听说Timsort非常擅长这种事情。

答案 4 :(得分:0)

  • Arrays.sort()必须是您的选择。
  • 为Rational对象提供一个索引字段,并在compareTo()中使用它,而不是像
  • 那样
  

this.numerator * other.denominator - this.denominator * other.numerator

祝你好运!

相关问题