scala> def sort(xs: Array[Int]) {
| def swap(i: Int, j: Int) {
| val t = xs(i); xs(i) = xs(j); xs(j) = t
| }
| def sort1(l: Int, r: Int) {
| val pivot = xs((l + r) / 2)
| var i = l; var j = r
| while (i <= j) {
| while (xs(i) < pivot) i += 1
| while (xs(j) > pivot) j -= 1
| if (i <= j) {
| swap(i, j)
| i += 1
| j -= 1
| }
| }
| if (l < j) sort1(l, j)
| if (j < r) sort1(i, r)
| }
| sort1(0, xs.length - 1)
| }
sort: (Array[Int])Unit
scala> var xs = Array(4,1,2,3,7,5)
xs: Array[Int] = Array(4, 1, 2, 3, 7, 5)
scala> sort(xs)
scala> xs
res4: Array[Int] = Array(1, 2, 3, 4, 5, 7)
scala>
下記、原文のコードは間違い。{ } が不足。
scala> def sort(xs: Array[Int]): Array[Int] = {
| if (xs.length <= 1) xs
| else {
| val pivot = xs(xs.length / 2)
| Array.concat(
| sort(xs filter (pivot >)),
| xs filter (pivot ==),
| sort(xs filter (pivot <)))
| }
|
| }
sort: (Array[Int])Array[Int]
scala> var xs = Array(4,1,2,3,7,5)
xs: Array[Int] = Array(4, 1, 2, 3, 7, 5)
scala> sort(xs)
res6: Array[Int] = Array(1, 2, 3, 4, 5, 7)
scala>