2011年12月4日日曜日

scalaでクイックソート

scalaでクイックソートを実装してみました。
一言付け加えますが、このコードはscalaの特徴である関数型をフル活用
したコードになっておりませんので、関数型をフル活用したコードについては
ネットで検索すればいくらでも出てくるのでそちらを参照してください。



import scala.util._
def sort(A:Array[Int], left:Int, right:Int) : Int= {
 if(left<right){
  val p:Int = partition(A, left, right)
  sort(A, left, p-1)
  sort(A, p+1, right)
 }
 1
}
def partition(A:Array[Int], left:Int, right:Int) : Int = {
 val p = left
 var tmp = A(p)
 A(p) = A(right)
 A(right) = tmp
 var store = left
 for(i <- left to right) {
  if(A(i) < A(right)) {
   tmp = A(i)
   A(i) = A(store)
   A(store) = tmp
   store+=1
  }
 }
 tmp = A(store)
 A(store) = A(right)
 A(right) = tmp
 store
}
def randomArray(no:Int):Array[Int] = {
 val r = new Random
 var A = new Array[Int](no)
 for(i <- 0 to A.length-1) A(i) = r.nextInt(no)
 A
}

val A = randomArray(20)
sort(A, 0 ,A.length - 1)
for(i <- 0 to A.length - 1) {
 println(A(i))
}

0 件のコメント:

コメントを投稿