以下の実装は機能していると思いましたが、どうやら機能していないようです。を使用したこのクイックソートの実装の何が問題なのかについてのアイデアはあり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、