Ниже приведена реализация быстрой сортировки текстовых книг в 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. Или вы можете реализовать свой QuickSort в Java и Scala и сравнить результаты.