Пытаюсь сам написать быструю сортировку. Сортирую вектор из даблов.
Вот что получилось:
Код:
vector<double>::iterator LomutoPartition(
    const vector<double>::iterator& begin_of_array,
    const vector<double>::iterator& end_of_array) {
  vector<double>::iterator first_in_greaters = begin_of_array;
  vector<double>::iterator end_of_scanned = begin_of_array;
  double pivot =
      *(begin_of_array + rand() % (end_of_array - begin_of_array)) ;
  while (end_of_scanned != end_of_array) {
    if (*end_of_scanned <= pivot) {
      swap(*end_of_scanned, *first_in_greaters);
      ++first_in_greaters;
    }
    ++end_of_scanned;
  }
  return first_in_greaters;
}
void QuickSort(
    const vector<double>::iterator& begin_of_array,
    const vector<double>::iterator& end_of_array) {
// if size is not big - use simple sort
  if (end_of_array - begin_of_array <= 10) {
    SelectionSort(begin_of_array, end_of_array);
    return;
  }
  vector<double>::iterator first_right_part =
       LomutoPartition(begin_of_array, end_of_array);
  if (first_right_part - begin_of_array < end_of_array - first_right_part) {
    QuickSort(begin_of_array, first_right_part);
    QuickSort(first_right_part, end_of_array);
  } else {
    QuickSort(first_right_part, end_of_array);
    QuickSort(begin_of_array, first_right_part);
  }
}
Но работает оочень медленно. Selection Sort - там квадратичная сортировка, которую вызываю при малых размерах.
Если делаю так же, но не с итераторами, а индексами (то есть вектор передавать как vector<double>* ?), то эффекта нет.
Говорю "медленно", потому что std::sort работает во много-много раз быстрее. Я понимаю, что она написана хорошо, но разница слишком велика.
В чем может быть проблема?