如果我有一个浮点数列表,其中包含:Infinity,-Infinity,其他随机十进制数和一个NaN。 NaN在列表排序后应该在哪里?如果有帮助,我会使用冒泡排序
答案 0 :(得分:4)
为了排序,您需要一致的订单,这意味着,例如,为NaN制定订购规则。
幸运的是,这项工作已经在Java中完成。 java.lang.Double
为Comparable
,其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将放在排序数组的开头或结尾,具体取决于相关冒泡排序的实现。
这完全取决于您如何定义订购标准。