У меня есть быстрая_сортировка код (С ++), который выглядит как этотQuickSort медленнее, чем станд :: сортировать
template< typename BidirectionalIterator, typename Compare >
BidirectionalIterator quick_sort_partition(BidirectionalIterator left, BidirectionalIterator right, Compare cmp) {
BidirectionalIterator q = left - 1;
std::mt19937 gen(time(0));
std::uniform_int_distribution<int> uid(0, right - left - 1);
int pivot_1 = uid(gen) ;
BidirectionalIterator randomNum = pivot_1 + left;
std::iter_swap(randomNum, right);
bool index = 0;
for (BidirectionalIterator i = left; i < right; i++){
if (*i < *right){
++q;
std::iter_swap(q, i);
}
if (*i == *right){
index = 1 - index;
if(index){
++q;
std::iter_swap(q, i);
}
}
}
++q;
std::iter_swap(q, right);
return q;
}
template< typename BidirectionalIterator, typename Compare >
void quick_sort(BidirectionalIterator first, BidirectionalIterator last, Compare cmp) {
if (first < last){
BidirectionalIterator q = quick_sort_partition(first, last, cmp);
quick_sort(first, q - 1, cmp);
quick_sort(q + 1, last, cmp);
}
}
но он медленнее (более 6 раз), чем станд :: сортировать на больших испытаний.
Любые идеи, почему?
Как оптимизировать мой код для хорошей работы?
Почему бы не посмотреть код в < algorithm >, чтобы узнать, в чем отличия? – rcgldr
Почему бы не заменить ваш код вызовом 'std :: sort'? : p Лучшие вопросы практичны и достаточно узкие. «Я не могу писать код так же быстро, как моя библиотека« std »не очень практична или узка. – Yakk
Потому что люди, которые написали 'sort' new, использовали бы очень большую аудиторию и сделали бы ее максимально эффективной? – NathanOliver