- 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
=pivot) right=right-1 //控制right指针比较并左移 - while(left
1 //控制left指针比较并右移 - if(left
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(" "))
- }
- }








