我正在寻找在 FFT 转换后对数字进行排序的最快算法——只有绝对实数。values)=双精度有理数,用于 2^19 个元素的 1d 数组。我认为megre排序将是最好的......
5 回答
如果您的问题是关于排序 a double[]
,请使用Arrays.sort
. 这是一个快速排序的衍生物。
如果您拥有的是一个表示双精度分数的对象数组,那么该类需要实现Comparable
,但再次为您提供最佳服务Arrays.sort(Object[])
,它使用 timsort (从 Java 7 开始)。但是要小心,性能就在你手中:不要搞乱compareTo
.
使用什么算法并不取决于您要排序的对象类型,而是取决于它们的混乱程度。
请参阅http://www.sorting-algorithms.com/以比较不同标准算法在不同情况下的表现。
如果您只是对大约 1/2 百万个元素进行排序,那么您有很多选择。无论您使用什么语言,您都可以摆脱标准排序算法。
似乎元素之间会有很好的可变性,但我不确定 FFT 转换是否会产生具有大量已排序数字的数组。如果是这样,您将希望避免使用快速排序。我听说 Timsort 非常擅长这种事情。
- Arrays.sort() 必须是您的选择。
- 为您的 Rational 对象提供一个索引字段,并在您的 compareTo() 中使用它,而不是类似
this.numerator * other.denominator - this.denominator * other.numerator
祝你好运!
仅用于Arrays.sort
Java7 中的信息使用Timsort:
Timsort 是一种混合排序算法,源自合并排序和插入排序,旨在在多种现实世界数据上表现良好。它是由 Tim Peters 于 2002 年发明的,用于 Python 编程语言。该算法找到已经排序的数据子集,并使用这些子集更有效地对数据进行排序。这是通过将已识别的子集(称为运行)与现有运行合并来完成的,直到满足某些标准。Timsort 自 2.3 版以来一直是 Python 的标准排序算法。它现在还用于在 Java SE 7 和 Android 平台上对数组进行排序。