Быстрая сортировка в Scala против java.util.Arrays.sort

1

Ниже приведена реализация быстрой сортировки текстовых книг в 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
}
  • 2
    Потому что Java Arrays.sort использует версию Timsort ?
  • 2
    Я бы повторил ваш вопрос, чтобы было очевидно, что это вопрос «Java vs Scala». Кроме того, составьте график своей ручной сортировки Scala и сортировки стандартной библиотеки Java для массивов размером от 100 до некоторого размера, достаточно большого, чтобы увидеть очевидную тенденцию, и опубликуйте это здесь.
Показать ещё 6 комментариев
Теги:
optimization
performance
quicksort

1 ответ

2

Вы оптимизировали реализацию обобщенного алгоритма сортировки (java.util.Arrays.sort) с помощью оптимизированной обработки (ваш Scala-код).

Таким образом, он должен быть медленнее.

Для чего вы нацелены? Для хорошего сравнения вы можете попробовать сравнить различные алгоритмы сортировки, предоставленные стандартной библиотекой Scala, против тех, которые предоставляются стандартным распределением Java. Или вы можете реализовать свой QuickSort в Java и Scala и сравнить результаты.

  • 1
    Я согласен, что OP сравнивает яблоки с грушами и собирался также предложить сравнить ту же самую рукописную быструю сортировку на Java.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню