对包含NaN的列表进行排序

时间:2015-02-06 12:55:05

标签: list sorting floating-point nan

如果我有一个浮点数列表,其中包含:Infinity,-Infinity,其他随机十进制数和一个NaN。 NaN在列表排序后应该在哪里?如果有帮助,我会使用冒泡排序

3 个答案:

答案 0 :(得分:4)

为了排序,您需要一致的订单,这意味着,例如,为NaN制定订购规则。

幸运的是,这项工作已经在Java中完成。 java.lang.DoubleComparable,其compareTo使用扩展规则,包括" Double.NaN被此方法视为等于自身且大于所有其他double值(包括Double) 。.POSITIVE_INFINITY)"

它还有一个compare方法,可以使用这些扩展规则比较两个双基元,而不是<=等规则。

如果您使用Java编程,则可以直接在排序中使用它。如果您使用的是float而不是double,请参阅java.lang.Float中的相应方法。如果您使用其他语言编程,您仍然可以从Java中读取和复制规则,并在比较函数中使用它们。

如果你在排序中使用它,你应该期望NaN位于排序列表的最后,在所有有限值和正无穷大之后。

答案 1 :(得分:3)

无法使用<=作为比较对包含NaN的浮点值列表进行排序,因为<=不是包含NaN的浮点值的顺序}:它不是自反性的(NaN <= NaN必须保持<=具有反身性。它不会。

您打破了排序算法的先决条件。任何事情都可能发生。

答案 2 :(得分:0)

NaN将放在排序数组的开头或结尾,具体取决于相关冒泡排序的实现。

这完全取决于您如何定义订购标准。