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

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

scala学习(一)--------------------快速排序代码分析

以下是一个scala版的快速排序实现: object qsort {   def qsort [T     case Nil => Nil     case x :: xs => ...
  • happyAnger6
  • happyAnger6
  • 2015年04月01日 23:22
  • 1109

【scala 数据结构和算法】Scala实现:快速排序

算法思想: 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对...
  • u013421629
  • u013421629
  • 2017年12月18日 19:49
  • 87

经典算法与数据结构的c++实现——快速排序

因为是经典的算法,所以网上描述一大把,直接上个图,直观些,给记性不好的菜鸟(如我)一点儿提示。 快速排序是冒泡排序的一种改进。通过轴值的选择方法不同,算法的速度也不一样。本文下面的代码采取选择最左...
  • y277an
  • y277an
  • 2016年03月22日 17:24
  • 628

数据结构值排序算法(三)-快速排序

基本思想: 快速排序采用的思想是分治思想。 第一趟排序:快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元...
  • tuke_tuke
  • tuke_tuke
  • 2015年12月23日 11:17
  • 3792

数据结构之---C语言实现快速排序(多个版本)

数据结构之---C语言实现快速排序(多个版本)
  • u012965373
  • u012965373
  • 2015年09月08日 17:07
  • 2386

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

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

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

今天来说一说快速排序:基本思想: 任取一个元素 (如第一个) 为轴点 所有比它小的元素一律前放,比它大的元素一律后放,形成左右两个子表 对各子表重新选择中心元素并依此规则调整,直到每个子表的元素只剩一...
  • u013271921
  • u013271921
  • 2015年05月25日 20:14
  • 1470

Android程序员必备-数据结构与算法之快速排序(一)

快速排序算法
  • NTSDB
  • NTSDB
  • 2016年10月04日 00:54
  • 1428

scala数据结构和算法-01-用scala实现合并排序

package data import scala.collection.mutable.ListBuffer import scala.util.control.Breaks object Me...
  • hxpjava1
  • hxpjava1
  • 2016年12月30日 21:20
  • 391

数据结构 - 快速排序(Quick Sort) 详解 及 代码(C++)

快速排序(Quick Sort) 详解 及 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 快速排序(Quick Sort): 通过一趟排序...
  • u012515223
  • u012515223
  • 2014年04月25日 17:18
  • 4190
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:scala数据结构和算法-04-快速排序实现
举报原因:
原因补充:

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