我认为我下面的实现是有效的,但显然不是。关于使用这种快速排序实现有什么问题的任何想法std::partition
?我有一个使用 nth_element 版本的版本,它的代码非常相似和简单。
template <typename It>
void quickSort (const It& lowerIt, const It& upperIt)
{
auto d = upperIt - lowerIt ;
if ( d < 2 )
return;
auto midIt = lowerIt + d / 2;
using T = typename std::iterator_traits<It>::value_type;
T midValue = *midIt;
auto pIt = std::partition ( lowerIt, upperIt, [midValue](T i) { return i < midValue; } );
quickSort( lowerIt, pIt );
quickSort( pIt + 1, upperIt );
}
使用分区:
前:
83、86、77、15、93、35、86、92、49、21、
后:
21, 15, 77, 35, 49, 83, 86, 92, 86, 93,