2

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

4

2 に答える 2