0
点赞
收藏
分享

微信扫一扫

scala数据结构和算法-04-快速排序实现


 

package data

import scala.collection.mutable.ListBuffer
import scala.collection.mutable.ListBuffer

object QuickSort {

def quickSort[T<% Ordered[T]](source:ListBuffer[T],left:Int,right:Int):ListBuffer[T]={
if(left==right)ListBuffer()
else{
val index=partition(source,left,right)
if(left==index){
if(right-index>=2){
quickSort(source,index+1,right)
}
}else if(right==index){
if(index-left>=2){
quickSort(source,left,index-1)
}
}else{
if(index-left>=2){
quickSort(source,left,index-1)
}
if(right-index>=2){
quickSort(source,index+1,right)
}
}

source
}
}

def partition[T<%Ordered[T]](source:ListBuffer[T],left:Int,right:Int):Int={
val cmp=source(left)
var leftIndex=left
var rightIndex=right
var direction=true;
while(leftIndex<rightIndex){
if(direction){
if(source(rightIndex)<cmp){
source(leftIndex)=source(rightIndex);
leftIndex+=1;
direction=(!direction);
}else{
if(leftIndex<rightIndex){
rightIndex-=1;
}
}
}
if(!direction){
if(source(leftIndex)>=cmp){
source(rightIndex)=source(leftIndex)
rightIndex-=1
direction=(!direction);
}else{
if(leftIndex<rightIndex){
leftIndex+=1;
}
}
}

}
source(leftIndex)=cmp;
leftIndex
}


def main(args: Array[String]): Unit = {
val source=ListBuffer(1,3,7,5,4,15,3,9,6,8,33,12,14,12,17,16,18);
println(quickSort(source,0,source.length-1).mkString(","))
}
}

 

举报

相关推荐

0 条评论