2015-04-17 131 views
6

我需要知道NSArray类的 sortedArrayUsingComparator函数的时间复杂度。一个消息来源会很棒,因为我很可能在我的学士论文中提到它。 我正按距离排序位置数组到当前位置。sortedArrayUsingComparator的时间复杂度(大O)是什么? iOS/OSX

我能找到的唯一答案是有人说这是至少T(N)= O(N),但有可能T(N)=为O(n log n)的

我怎么会知道肯定?

回答

3

通过NSArray排序时间的实际测试符合O(n*log(n))

blog post

注意,在评论有一种方法(PS9110),这是O(n),但专有和专利。该方法非常有趣。

0

基于比较成本的排序算法至少为O(n log n)。看到这个link

由于其名称sortedArrayUsingComparator显示,该方法是基于比较,所以它会花费至少O(n log n)。

1

那么要排序数组,你必须至少看看每个元素是肯定的O(n)。有几篇数学论文向您展示,例如,之类的O(n*log(n))不能有更好的排序算法。由于比较器实现了Mergesort我认为复杂性应该是O(n*log(n))最好,平均和最坏的情况。

你可以找到一些有关Mergesort这里: Mergesort

而且有些文章关于最好的排序算法的时间复杂度:

我找不到给定方法的具体实现,但在这里是一篇很好的文章,您可以更深入地了解Objective-C中的数组实现以及查看方法实现: Exposing NSMutableArray

相关问题