在升序和降序中订购整数

时间:2010-10-24 06:38:07

标签: objective-c algorithm sorting

我正在使用Objective-C,但可能与编程语言无关。所以基本上我有一个数组,比如整数12,5和17,我希望能够得出最大的数字,或者最小的数字,或者第二个最小的数字等。

基本上我希望能够将它们按升序或降序排序,所以如果它按升序排序,我可以通过检索objectAtIndex: 1来选出第二个最小的数字。我觉得这是非常明显的,但我现在想不出怎么做,所以如果有人能够启发我,我会很高兴。

5 个答案:

答案 0 :(得分:2)

如果您有NSArrayNSNumber个实例,那么您要查找的排序就像这样简单:

NSArray* sortedNumbers = [unorderedNumbers sortedArrayUsingSelector:@selector(intValue)];

它将按升序排序,因此[sortedNumbers lastObject]将是最大值。

如果您有更多特定需求,NSArray上还有更多排序方法。 NSArray sorting

答案 1 :(得分:1)

几乎所有高级语言(包括objective-c)都有库来对数组进行排序。但正如你所说语言并不重要,可能你正在寻找算法本身。有许多具有不同计算复杂度的排序算法。您可以在任何标准算法手册中找到它们。或者这2页可能会有所帮助:

  1. Sorting Algorithms in Wikipedia
  2. sorting-algorithms.com。包含动画的漂亮解释。
  3. 如果您对objective-c特别感兴趣,请查看Sorting section of NSArray reference。这包含一个对整数数组进行排序的示例。

答案 2 :(得分:0)

按升序对数组进行排序(我不使用目标C,但我确信它有一个函数),然后在任何地方获取元素...

获得最大的

array[array.length - 1]

第二大

array[array.length -2]

最小

array[0]

第二小的

array[1]

您应该检查以确保数组索引有效:

if (array.length - 2> 0) //Second largest element

    return array[array.length - 2];

或者:

if (array.length > 1) //Second smallest element

    return array[1];

请参阅此处了解如何在目标C中对数组进行排序:

http://howtomakeiphoneapps.com/2009/03/how-to-sort-an-array-in-objective-c/

答案 3 :(得分:0)

如果要保留原始数组的顺序,一种方法是创建第二个数组,该数组只包含数字0,1,... n,表示第一个数组的索引。然后对第二个数组进行排序,但不是比较它的值,而是比较它在第一个数组中指向的相应值。 (您也可以根据解除引用的指针存储指针和排序。)

然后找到第二大数字,在第二个数组的倒数第二个位置查找索引,并查看它在第一个数组中指向的位置。

如果你想获得幻想并避免排​​序,this lecture描述了一种在线性时间内找到k-最大元素的算法。我实际上并没有使用它,但如果您的数据经常更改,它看起来可能是一个很好的方法,因为您不必维护额外的数组。

答案 4 :(得分:0)

如果您的目标是获得最高数字,最低或最低,或者您拥有什么,并且您只需要结果中的一个数字,那么排序就太过分了。相反,您应该遍历整个阵列并跟踪到目前为止看到的最高(或最低,或最低(为第二低))数字。如果您的语言支持这一点,它将被称为“折叠”。实际对数组进行排序的唯一原因是,您需要从数组中访问多个不同的排名值。