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>