您的位置:首页 > 其它

快速排序的随机化版本

2016-09-28 22:41 441 查看
每次随机选择一个主元,与最后元素交换

import leet.ArrayUtils

import scala.util.Random

/**
* Created by fhqplzj on 16-9-28 at 下午10:24.
*/
object QuickSort {
def exchange(nums: Array[Int], i: Int, j: Int): Unit = {
val tmp = nums(i)
nums(i) = nums(j)
nums(j) = tmp
}

def partition(nums: Array[Int], p: Int, r: Int) = {
var i = p - 1
for (j <- p until r if nums(j) <= nums(r)) {
i += 1
exchange(nums, i, j)
}
i += 1
exchange(nums, i, r)
i
}

def quickSort(nums: Array[Int], p: Int, r: Int): Unit = {
if (p < r) {
val q = partition(nums, p, r)
quickSort(nums, p, q - 1)
quickSort(nums, q + 1, r)
}
}

def randomizedPartition(nums: Array[Int], p: Int, r: Int) = {
val random = new Random(System.nanoTime())
val i = p + random.nextInt(r - p + 1)
exchange(nums, i, r)
partition(nums, p, r)
}

def randomizedQuickSort(nums: Array[Int], p: Int, r: Int): Unit = {
if (p < r) {
val q = randomizedPartition(nums, p, r)
randomizedQuickSort(nums, p, q - 1)
randomizedPartition(nums, q + 1, r)
}
}

def main(args: Array[String]): Unit = {
val nums = ArrayUtils.generateRandomIntArray(0, 100, 50)
println(nums.mkString("[", ",", "]"))
randomizedQuickSort(nums, 0, nums.length - 1)
println(nums.mkString("[", ",", "]"))
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: