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_ } }
scala 快速排序
最新推荐文章于 2023-02-13 11:08:22 发布