我有一个看起来像这样的 quick_sort 代码(С++)
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);
}
}
但在大型测试中,他比 std::sort 慢(6 倍多)。
任何想法为什么?
如何优化我的代码以获得良好的工作?
最佳答案
您的 QuickSort 实现非常简单。它确实使用随机枢轴选择,确保没有导致性能下降的“杀手”输入,因此比绝对基本的 QuickSort 更好。
可以使用许多优化,其中包括:
关于c++ - QuickSort 比 std::sort 慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33156994/