2
現代のC ++でクラシックな並べ替えアルゴリズムを実装する方法は?
std::sortアルゴリズム(そのいとこstd::partial_sortとstd::nth_elementC ++標準ライブラリからの)は、ほとんどの実装である複数の基本ソートアルゴリズムの複雑ハイブリッド融合そのような選択ソート、挿入ソート、クイックソート、マージソート、又はヒープソートなど、。 ここやhttps://codereview.stackexchange.com/などの姉妹サイトには、これらの古典的なソートアルゴリズムの実装のバグ、複雑さ、およびその他の側面に関する多くの質問があります。提供されている実装のほとんどは、生のループで構成され、インデックス操作と具象型を使用しており、正確性と効率性の観点から分析することは一般的に重要です。 質問:上記の古典的な並べ替えアルゴリズムは、最新のC ++を使用してどのように実装できますか? 生のループはありませんが、標準ライブラリのアルゴリズム構築ブロックを組み合わせて<algorithm> イテレータインターフェイスと、インデックス操作や具象型の代わりにテンプレートを使用 完全な標準ライブラリを含むC ++ 14スタイル、autoおよび、テンプレートエイリアス、透過的なコンパレータ、ポリモーフィックラムダなどの構文ノイズリデューサー。 注: ソートアルゴリズムの実装の詳細については、Wikipedia、Rosetta Code、またはhttp://www.sorting-algorithms.com/を参照してください。 ショーン親の規則(スライド39)、生のループであるforオペレータと長い2つの関数の組成より-loop。そうf(g(x));か、f(x); g(x);あるいはf(x) + g(x);生のループではありません、そしてどちらのループしているselection_sortとinsertion_sort以下。 私はスコットマイヤーズの用語に従い、現在のC ++ 1yをすでにC ++ 14として示し、C ++ 98とC ++ 03の両方をC ++ 98として示しています。 @Mehrdadのコメントで示唆されているように、回答の最後にライブ例として4つの実装を提供します。C++ 14、C ++ 11、C ++ 98、BoostおよびC ++ 98です。 答え自体はC ++ 14に関してのみ示されています。必要に応じて、さまざまな言語バージョンが異なる構文とライブラリの違いを示します。