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

原创 2017年01月03日 13:19:23
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(","))
  }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

数据结构快速排序算法实现

  • 2011年06月16日 12:57
  • 141KB
  • 下载

数据结构:快速排序算法的研究

  • 2009年08月10日 18:19
  • 338KB
  • 下载

数据结构和算法学习系列之快速排序的Partition函数一种实现方法

这种方式不同于以往的两个游标从左右两侧交替比较的方法。而是只是从一侧走向另一侧。不失为一种思路 1. 在书中看到快速排序的Partition一种实现方法。最开始颇为不理解。后来画图试数,不得不承认...

算法与数据结构——快速排序

  • 2007年07月09日 20:18
  • 90KB
  • 下载

数据结构严蔚敏版快速排序算法c语言实现

//严蔚敏数据结构快速排序算法c语言实现 #include typedef int InfoType; /* 定义其它数据项的类型 */ /* c10-1.h 待排记录的数据类型 */ #define...
  • earbao
  • earbao
  • 2015年12月28日 11:07
  • 3796

数据结构 排序算法之快速排序

  • 2012年04月01日 10:31
  • 1KB
  • 下载

数据结构算法之排序系列Java、C源码实现(6)--快速排序

快速排序 采用一种分治的方法,通常又称为分治法。思想:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些问题,然后将这些子问题的解组合为原问题的解。 快速排序就是先找到一个中间轴(一...

数据结构 快速排序 排序算法

  • 2010年01月28日 09:27
  • 968B
  • 下载

数据结构排序算法之快速排序(c语言实现)

本文较为详细地整理了快速排序的大体思路;并用c语言进行了实现。
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:scala数据结构和算法-04-快速排序实现
举报原因:
原因补充:

(最多只允许输入30个字)