0

我知道在创建数组时可以使用 NSSortDescriptor 对数组进行排序,但是是否有预先构建的方法来获取已经存在的数组并判断它是否已经排序?

如果没有,我可以自己想出两种方法:

  1. 这个问题中的代码。
  2. 从我的旧数组创建一个新数组,但在创建新数组时使用 NSSortDescriptor,然后检查两个数组是否相等。

我的代码优化有点生疏,那么这两种方法中哪一种会更好(更快/最稳定)?还是有另一种方法可以检查比这两种方法更好?

4

2 回答 2

1

您提到的问题表明该算法是 O(n) 并且尽可能快。一般来说,排序总是比这更昂贵。对于某些算法,例如冒泡排序,当且仅当输入已经排序时才采用 O(n) 。

所以你的建议 (1) 总是会胜过你的建议 (2),因为后者是排序的成本加上相等测试的成本,而相等测试本身就是 O(n)。

如果您有一个可变数组并希望维护它是否已排序,则在排序时设置一个标志并在任何添加时重置该标志。

于 2012-10-10T17:52:22.043 回答
-1

这里的另一种方法是继承 NSMutableArray,它有一个 BOOL 排序属性,你可以在对数组排序时设置它。

如果你不想子类化,你可以在数组上设置一个键,它表示相同的东西,然后如果你传递它,它会留在数组中。

// create array
NSMutableArray* array = [NSMutableArray arrayWithCapacity:1];
[array setValue:NO forKey:@"sorted"];

//... insert values
//... sort

// check if sorted
BOOL sorted = [array valueForKey:@"sorted"];

// add a new value to the array
[array addObject:obj];
[array setValue:NO forKey:@"sorted"];
于 2012-10-10T19:34:53.000 回答