scala 快速排序

来源:互联网 发布:以诚支票打印软件 编辑:程序博客网 时间:2024/06/03 17:34
import scala.collection.mutable.ListBuffer/**  * Created by Administrator on 2016/6/25.  * 快速排序:首先找一个基准元素,通常取第一个或最后一个元素作为基准元素,然后,  * 从右向左遍历,找到第一个比基准元素小的元素,并记录下当前元素的索引right,两者交换,  * 交换完成后,就开始从左往右遍历,找到第一个比基准元素大的元素或者left和right相等,就把left和right位置的元素交换。  * 这样经过一次遍历后,序列就会分成两部分,一部分都是比基准元素小的,在左边,另一部分都是比基准元素大的,在右边。  * 然后就可以分别对这两部分以同样的方式排序,最终达到整个有序。  *  */object QuickSort {  def main(args: Array[String]) {    var buffer = ListBuffer(49, 38, 65, 97, 76, 13, 27, 49, 78, 34, 12, 64, 5, 4, 62, 99, 98, 54, 56, 17, 18, 23, 34, 15, 35, 25, 53, 51)    println("sort before......")    for(item <- buffer) {      print(item + " ")    }    println()    quickSort(buffer, 0, buffer.size - 1)    println("sort after......")    for(item <- buffer) {      print(item + " ")    }  }  def quickSort(buf: ListBuffer[Int], low: Int, high: Int): Unit = {    if(low < high) {      val baseline_index = getBaselineIdx(buf, low, high)      quickSort(buf, low, baseline_index - 1)      quickSort(buf, baseline_index + 1, high)    }  }  def getBaselineIdx(buf: ListBuffer[Int], low: Int, high: Int): Int = {    var low_ = low    var high_ = high    val tmp = buf(low_)    while(low_ < high_) {      while(low_ < high_ && buf(high_) >= tmp) {        high_ = high_ - 1      }      buf(low_) = buf(high_)      while(low_ < high_ && buf(low_) <= tmp) {        low_ = low_ + 1      }      buf(high_) = buf(low_)    }    buf(low_) = tmp    low_  }}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 qq没有银行卡转不出钱怎么办 qq钱包限制一万怎么办 qq余额超过20万怎么办 扣扣忘记了密码怎么办 qq钱包发不出来怎么办 qq支付密码忘了怎么办? 扣扣上转账错了怎么办 qq绑卡存在异常怎么办 微信没绑银行卡忘记支付密码怎么办 微信的自动扣费怎么办 不小心把钱充到微信财付通该怎么办 财付通用什么充值卡充值话费怎么办 苹果手机灯坏了怎么办 手机电灯不亮了怎么办? 苹果手机相机坏了怎么办 苹果5s手机背光灯不亮怎么办 苹果5s灯控坏了怎么办 微信q币冲错号码怎么办 支付宝转账到之前号码怎么办 qq红包收不了钱怎么办 qq抢红包要实名认证怎么办 支付宝被骗冲q币怎么办 qq发红包发错了怎么办 qq红包发不出来怎么办 qq红包发多了怎么办 qq发红包要短信验证怎么办 不是qq好友发了红包怎么办 苹果手机升级后支付宝打不开怎么办 qqq币充了没进帐怎么办 怎么办q币换成qq余额 支付宝qb冲多了怎么办 微信没钱怎么办怎么赚 忘记微信支付密码怎么办 手机设备注册达上限怎么办 在新手机上登微信需要验证怎么办 手机号被限制注册qq号怎么办 手机互换了微信怎么办 微信申诉只有一位好友怎么办 微信申诉没有好友怎么办 四川电信多余的话费怎么办 四川电信话费多了怎么办