Scala 範例程式 - 傳統寫法的快速排序 (Sort)

``````/** Quick sort, imperative style */
object sort {

/** Nested methods can use and even update everything
*  visible in their scope (including local variables or
*  arguments of enclosing methods).
*/
def sort(a: Array[Int]) {

def swap(i: Int, j: Int) {
val t = a(i); a(i) = a(j); a(j) = t
}

def sort1(l: Int, r: Int) {
val pivot = a((l + r) / 2)
var i = l
var j = r
while (i <= j) {
while (a(i) < pivot) i += 1
while (a(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)
}

if (a.length > 0)
sort1(0, a.length - 1)
}

def println(ar: Array[Int]) {
def print1 = {
def iter(i: Int): String =
ar(i) + (if (i < ar.length-1) "," + iter(i+1) else "")
if (ar.length == 0) "" else iter(0)
}
Console.println("[" + print1 + "]")
}

def main(args: Array[String]) {
val ar = Array(6, 2, 8, 5, 1)
println(ar)
sort(ar)
println(ar)
}

}```
```

``````D:\scala>scalac sort.scala

D:\scala>scala sort
[6,2,8,5,1]
[1,2,5,6,8]```
```
page revision: 4, last edited: 18 Oct 2009 03:55