以下是Scala中的教科书快速排序实现。将quickSortRecursive的执行时间与java.util.Arrays.sort()进行比较时,我发现java.util.Arrays.sort在大型数组上的速度要快一个数量级。有人能暗示这种性能差异的原因吗?
def quickSortRecursive(list: Array[Int])(low: Int=0, high: Int=list.length-1): Unit = {
if (low<high) {
swap(list,Random.nextInt(high),high)
val pivot = partition(list, low, high)
quickSortRecursive(list)(low, pivot-1)
quickSortRecursive(list)(pivot+1, high)
}
}
private def partition(list: Array[Int], low: Int, high: Int): Int = {
val pivot = list(high)
var lowhigh = low
for (i <- low until high) {
if (list(i) < pivot) {
swap(list, lowhigh, i);
lowhigh += 1;
}
}
swap(list, lowhigh, high);
lowhigh
}
private def swap(list: Array[Int], i: Int, j: Int): Unit = {
val tmp = list(i)
list(i) = list(j)
list(j) = tmp
}
答案 0 :(得分:2)
您将通用排序算法( java.util.Arrays.sort )的高度优化实现映射到手动执行的实现,而不进行优化(您的Scala代码)。< / p>
因此它必然会变慢。
你的目标是什么? 为了进行比较,您可以尝试将Scala标准库提供的不同排序算法与Java标准分配提供的算法进行比较。 或者您可以在Java和Scala中实现Quicksort并比较结果。