繁体   English   中英

Scala中的快速排序与java.util.Arrays.sort

[英]Quick Sort in Scala vs. java.util.Arrays.sort

以下是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
}

您将通用排序算法( java.util.Arrays.sort )的高度优化实现与未经优化的手动滚动实现( Scala代码 )进行了比较。

因此,它势必会变慢。

您的目标是什么? 为了更好地进行比较,您可以尝试将Scala标准库提供的不同排序算法与Java标准发行版提供的排序算法进行比较。 或者,您可以在Java和Scala中实现您的Quicksort并比较结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM