summaryrefslogblamecommitdiff
path: root/sources/examples/sort.scala
blob: 2c3c3666a5ad53ad7d72f6f2ffe3e67b589afa74 (plain) (tree)
1
2
3
4
5
6
7
8
9

                 
               
 
                                   
 


                                          
 










                                          
       

                             
     
 

                             


                                 





                                                               






                                                          
               

   
 
package examples;

object sorter {

  def sort(a: Array[Int]): Unit = {

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

    def sort1(l: Int, r: Int): Unit = {
      val pivot = a((l + r) / 2);
      var i = l, j = r;
      while (i <= j) {
        while (a(i) < pivot) { i = i + 1 }
        while (a(j) > pivot) { j = j - 1 }
        if (i <= j) {
          swap(i, j);
          i = i + 1;
          j = 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 xs = List(6, 2, 8, 5, 1);
    val ar = xs.copyToArray(new Array[Int](xs.length), 0);
    println(ar);
    sort(ar);
    println(ar)
  }

}