我有一个简单的快速排序实现:
template <typename IteratorType>
void quicksort(IteratorType begin, IteratorType end)
{
if (begin != end)
{
const auto pivot = *(begin + distance(begin, end) / 2);
const IteratorType sep = std::partition(begin, end, [pivot](typename IteratorType::value_type v){ return (v < pivot); });
if (sep != begin)
{
quicksort(begin, sep);
}
if (sep != end)
{
quicksort(sep + 1, end);
}
}
}
在 1000000 个元素的数组上测试它大约需要永远(6300 毫秒),然后有时会死于递归,而std::sort
需要大约 30 毫秒。
当然,我不希望我糟糕的实现速度如此之快,std::sort
但怎么会有如此巨大的差异呢?
我知道std::sort
使用比简单的快速排序(我相信它是 introsort)更复杂的东西来防止递归级别和东西走得太远。但是,是否有一些明显的我遗漏的东西可以解释如此巨大的差异?
改变箭头的大小表明差异因子不是恒定的,实际上它似乎在增长n²
。