package test
object QuickSort {
def quickSort(arr:Array[Int],startIndex:Int,endIndex:Int):Unit={
if(startIndex>=endIndex) return
//递归结束条件:startIndex>=endIndex
val pivotIndex:Int=partition(arr,startIndex,endIndex); //得到基准元素应该在的位置
quickSort(arr,startIndex,pivotIndex-1);//根据基准元素,分成两部分进行递归排序
quickSort(arr,pivotIndex+1,endIndex)
}
//进行一次排序
def partition(arr: Array[Int], startIndex: Int, endIndex: Int): Int ={
val pivot:Int=arr(startIndex) //基准元素
var left:Int=startIndex
var right:Int=endIndex
while(left!=right){
while(left<right && arr(right)>=pivot) right=right-1 //控制right指针比较并左移
while(left<right && arr(left)<=pivot) left=left+1 //控制left指针比较并右移
if(left<right){val p=arr(left);arr(left)=arr(right);arr(right)=p} //左右交换
}
arr(startIndex)=arr(left) //将基准元素和中间位置进行交换
arr(left)=pivot
left
}
def main(args: Array[String]): Unit = {
val arr:Array[Int]=Array(4,4,6,5,3,2)
quickSort(arr,0,arr.length-1)
println(arr.mkString(" "))
}
}