部分在Scala中排序数组

时间:2014-03-23 12:41:49

标签: arrays scala sorting

如何在Scala中对数组中的区域进行排序?

我有一个数组,比如var DivA = new Array[Int](100005)

我将DivA中的元素填充到某个小于100005的位置。 例如,我的数组看起来像Diva = {1,2,10,5,15,20}

在C ++中我们有sort(DivA, DivA + N),但是我们如何才能将Scala中的数组排序到某个索引?

我试过Sorting.quickSort(DivA),但我不知道如何定义我要对数组进行排序的索引,以便上面的语句对数组进行排序,数组看起来像{{1} }?

DivA={0,0,0,0,0}

4 个答案:

答案 0 :(得分:2)

如果要对数组中的某个区域进行排序,可以使用sort中的java.util.Arrays方法:

java.util.Arrays.sort(DivA, 0, 15)

此方法提供fromIndextoIndex。请注意,此方法将就地排序。在你的情况下,这可能是好的,因为你应用的风格似乎是'#34;命令式的"。

如果性能很重要,阵列可能会比其他集合更快。使用数组的其他原因可能是内存消耗或互操作性。

否则,您可以使用惯用的Scala集合以不同的方式设计数据结构/算法(更多"功能")。

答案 1 :(得分:1)

您可以根据需要使用sortedsortBy。如果是简单的Array[Int]sorted就足够了:

val arr = Array.iterate(15, 15)(_ - 1)
arr: Array[Int] = Array(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)

val sortedArray = arr.sorted
sortedArray: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)

如果您想要其他类型的订单,可以提供自己的Ordering类型类。

您可以在documentation.

中找到它

尽管如其他答案中所述,除非您有充分理由切换到Vector,否则您应该更喜欢不可变Array

答案 2 :(得分:1)

sorted()方法适用于所有集合,Scala中的数组被隐式转换为集合。 因此,您可以在Array[Int]上调用排序,例如:

scala> val p = (10 to 1 by -1).toArray
p: Array[Int] = Array(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)

scala> p.sorted
res5: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

答案 3 :(得分:0)

首先,如果你是在Scala中编程,你应该考虑Vector或List,因为那些是不可变的,这是在Scala中编程的预先方式......

对于Vector和List,有sorted()函数对数组进行排序