您的位置:首页 > 理论基础 > 数据结构算法

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

2017-01-03 13:19 483 查看
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(","))
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: