object Main extends App {
def quickSort (array: Array[Int], left: Int = 0, right: Int): Array[Int] = {
if (array.length < 2){
return array
} else if (array.length == 2) {
if(array(left) > array(right)){
val temp = array(left)
array(left) = array(right)
array(right) = temp
}
}
val pivotPosition = sortOnPivot(array, left, right)
val (leftAr,rightAr) = (array.slice(0, pivotPosition), array.slice(pivotPosition, array.length))
quickSort(leftAr, 0, leftAr.length-1) ++ quickSort(rightAr, 0, rightAr.length-1)
}
def sortOnPivot(array: Array[Int], left:Int, pivot: Int): Int = {
var pivotPosition = pivot
for (n <- left until array.length) {
if (array(n) > array(pivot)) {
//slice to left
var temp = array(pivot-1)
array(pivot-1) = array(pivot)
array(pivot) = temp
//exchange
temp = array(n)
pivotPosition = n
array(n) = array(pivot)
array(pivot) = temp
}
}
pivotPosition
}
val l = Array(1,4,3,7,5,8,6,20,3,1,0,22)
println(quickSort(l, 0, l.length-1).toList)
}