快速排序的随机化版本
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("[", ",", "]"))
}
}
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("[", ",", "]"))
}
}
相关文章推荐
- 快速排序的随机化版本
- 第七章快速排序之“快速排序的随机化版本RANDOM-QUICKSORT”
- 经典算法--快速排序的随机化版本
- 快速排序之随机化版本(7)
- 快速排序的随机化版本代码
- 《算法导论》笔记 第7章 7.3快速排序的随机化版本
- 每日编程3之快速排序随机化版本
- CLRS 7.3快速排序的随机化版本
- 《算法导论》笔记 第7章 7.3快速排序的随机化版本
- 快速排序随机化版本
- 算法实践篇-快速排序-随机化版本
- 算法导论7.3快速排序的随机化版本
- 快速排序学习2(随机化版本)
- 快速排序随机化版本
- 算法导论 第2版 7.3 快速排序随机化版本
- 快速排序(递归版本)
- 快速排序版本二
- 每日编程7之快速排序非递归版本
- 算法导论-排序(二)快速排序、随机化快速排序
- 基本排序方法及分析(九):Randomized-Quicksort快速排序的随机化版本