diff --git a/scala/official-by-example/byx/src/main/scala/sort.scala b/scala/official-by-example/byx/src/main/scala/sort.scala index 2ce98cc..a33daa0 100644 --- a/scala/official-by-example/byx/src/main/scala/sort.scala +++ b/scala/official-by-example/byx/src/main/scala/sort.scala @@ -1,23 +1,12 @@ object sort { - def sort(xs: Array[Int]) { - def swap(i: Int, j: Int) { - val t = xs(i); xs(i) = xs(j); xs(j) = t + 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 <))) } - 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) } }