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
好吧,我认为行为总是一样的。很高兴知道。 –