NSArray stable中的各種排序方法是否使用排序算法? (因爲它們是「穩定排序」算法,其中具有相同排序鍵的項目保留其相對順序。)NSArray使用的排序算法是否穩定排序?
回答
在doc中,沒有給出關於相同項目的最終順序的細節。
所以,我覺得作出有關的秩序將是一個壞主意任何假設。即使您通過實驗確定訂單是什麼,這可能會根據數組中的項目數量或iOS的哪個版本進行排序來更改。
對於我來說,我會堅持與文檔所提供的承諾。
即使我已經徹底測試過了,我也不會相信它,Apple可能會在下一個版本中更改使用的算法,使得任何測試都毫無意義,並可能導致一些奇怪的錯誤。 – JustSid
文檔*確實指定了它,它只是隱藏在'NSSortOptions'的文檔之後:https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Constants/Reference/reference。 html#// apple_ref/doc/c_ref/NSSortOptions – wxactly
唯一的「官方」的答案,我發現這個是一個2002 mailing list post由克里斯·凱恩從蘋果:
的NSArray/NSMutableArray裏的排序方法的穩定性是不確定的, 所以你應該預料到他們不穩定。由於未定義,所以 的情況可能也會隨着發佈而變化,但我並不是 (我)預計這很可能。目前的實現 使用快速排序,該算法的一個版本幾乎與BSD的qsort()例程相同。實驗一束在一個點上發現它 很難通過一般類型的數據,我們 在測試做的更好。 [當然,如果一個人有更多的信息 有關數據進行排序,可以使用其他算法或 修改有助於這種情況。]
我不知道這是否仍然是正確的,給予多大該帖子是,但它可能是最好的假設NSArray
的排序方法是不是穩定。
穩定的排序不能保證,除非你用NSSortStable
。從documentation on NSSortOptions:
NSSortStable
指定排序的結果應返回的項目相比,在他們最初發生的順序同等價值。
如果該選項未被指定等於對象可能或可能不會在原來的順序返回。
如果你需要保證一個穩定的排序,你可以試試:
[array sortWithOptions:NSSortStable usingComparator:^NSComparisonResult(id obj1, id obj2) {
return [obj1 compare:obj2];
}];
'(void)sortWithOptions:usingComparator:'適用於可變數組... ...還有'(NSArray *)sortedArrayWithOptions:usingComparator:'如果那浮起你的船 – wxactly
- 1. 排序算法穩定或不穩定的原因是什麼?
- 2. 快速排序算法穩定性
- 3. 對基數排序只使用穩定的排序算法有什麼需要?
- 4. 是否有黑盒方法來檢測排序算法是否穩定?
- 5. 如何將非穩定排序轉換爲穩定算法?
- 6. 排序NSArray的排序
- 7. 排序和穩定
- 8. 使C#ParallelEnumerable.OrderBy穩定排序
- 9. 是否有排序算法排序O(∞)排列?
- 10. 使用will-paginate排序算法排序
- 11. 排序算法排序使用模板
- 12. Powershell Sort-Object是否使用穩定的排序
- 13. NSArray的排序:
- 14. NSArray的排序
- 15. 排序的NSArray
- 16. NSArray的排序
- 17. 選擇排序。如何做選擇排序作爲穩定的算法?
- 18. 如何使用穩定排序對DataGrid進行排序?
- 19. 在C++中std :: multiset是否保持穩定的排序順序?
- 20. 使用sortedArrayUsingFunction排序NSArray
- 21. 改變一個黑箱陣列排序算法是一個穩定的算法
- 22. NSArray排序NSMutableArray
- 23. undo nsarray排序
- 24. iOS NSArray排序
- 25. JavaScript穩定排序問題
- 26. 穩定拓撲排序
- 27. 選擇排序 - 穩定
- 28. scala排序穩定嗎?
- 29. 排序NSArray的NSDictionaries
- 30. 排序UIImagerview的NSArray?
你試試看? –
@TDeBailleul「給它一個嘗試」在這種情況下並不真正有用。在某些情況下,排序可能是穩定的,但在其他情況下,排序可能是穩定的,這取決於數據的大小,陣列的構建方式等。 – omz
好吧,我認爲行爲總是一樣的。很高興知道。 –