[leecode]快速排序

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(" "))
  }
}

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值