1

我正在寻找在 FFT 转换后对数字进行排序的最快算法——只有绝对实数。values)=双精度有理数,用于 2^19 个元素的 1d 数组。我认为megre排序将是最好的......

4

5 回答 5

2

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

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

于 2012-10-27T10:34:44.533 回答
0

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

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

于 2012-12-17T09:57:07.703 回答
0

如果您只是对大约 1/2 百万个元素进行排序,那么您有很多选择。无论您使用什么语言,您都可以摆脱标准排序算法。

似乎元素之间会有很好的可变性,但我不确定 FFT 转换是否会产生具有大量已排序数字的数组。如果是这样,您将希望避免使用快速排序。我听说 Timsort 非常擅长这种事情。

于 2013-11-11T03:01:42.450 回答
0
  • Arrays.sort() 必须是您的选择。
  • 为您的 Rational 对象提供一个索引字段,并在您的 compareTo() 中使用它,而不是类似

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

祝你好运!

于 2014-08-31T09:18:13.397 回答
0

仅用于Arrays.sortJava7 中的信息使用Timsort

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

于 2012-10-27T10:41:59.503 回答