2015-02-06 48 views
-1

如果我有一個浮點數列表,包含:Infinity,-Infinity,其他隨機十進制數和一個NaN。在列表排序後,NaN應該在哪裏?我使用冒泡排序是否有幫助排序包含NaN的列表

+0

歡迎來到Stack Overflow。這不是在這裏提出問題的好方法。你有沒有嘗試解決你的問題?首先顯示你的努力,以便人們可以展示他們的努力請閱讀[常見問題](http://stackoverflow.com/tour),[如何問](http://stackoverflow.com/help/how-to-ask)和[幫助中心](http:// stackoverflow .com/help)作爲開始。 – 2015-02-06 13:00:52

+0

有沒有問題要解決,它的一個問題,並在要求答案 – 2015-02-06 13:10:15

+0

什麼語言? Java有一個簡單的答案。 – 2015-02-06 13:55:50

回答

3

不能排序浮點值NaN的使用<=作爲比較,因爲<=不是浮點值的順序包括NaN包括列表:它不是反身( NaN <= NaN將不得不保持爲<=是反身性的。

您正打破排序算法的先決條件。任何事情都可能發生。

3

爲了排序,您需要一致的順序,這意味着,例如,爲NaN制定排序規則。

幸運的是,這項工作已經在Java中完成了。 java.lang.DoubleComparable,它的compareTo使用擴展規則,包括「通過這種方法認爲Double.NaN等於其自身並且大於所有其他雙值(包括Double.POSITIVE_INFINITY)」。

它也有一個compare方法比較使用這些擴展規則的兩個雙基元,而不是<=等規則。

如果你使用Java編程,你可以直接在你的排序中使用它。如果您使用的是float而不是double,請參閱java.lang.Float中的相應方法。如果您使用其他語言進行編程,您仍然可以從Java中讀取和複製規則,並在比較函數中使用它們。

如果你在你的排序中使用它,你應該預期NaN在排序列表的最後,所有有限值和正無窮大之後。

+0

感謝您的提示,我不知道這一點。我在此鏈接找到了「compareTo」的文檔:http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html – njuffa 2015-02-06 15:51:11

0

NaN將放置在排序數組的開始或結尾,具體取決於所討論的Bubble Sort的實現。

這完全取決於您如何定義您的訂購標準。

相關問題