C qsort()とC ++ sort()
ここでは、Cのqsort()とC ++のsort()の違いを確認します。
Cは、配列のソートに使用できるqsort()関数を提供します。関数の引数と構文は次のようになります。
void qsort(void *base, size_t num, size_t size, int (*comparator) (const void*, const void*));
この関数は、その配列のベースアドレス、つまりその配列の要素数を取得します。配列内の各アイテムのサイズ、およびコンパレータ関数。
C ++はsort()関数を提供します。これはC++STL内にあります。引数と構文は次のようになります。
void sort(T first, T last, Compare c);
ここでは、繰り返される要素の順序が保持されることが保証されていません。そのために、C++STLによって提供されるstable_sortを使用できます。
qsort()とsort()の違い
Cのqsort() | C ++のsort() |
---|---|
クイックソートアルゴリズムを使用します。 | イントロソートを使用します。これはハイブリッドソートアルゴリズムです。ここでは、さまざまな実装がさまざまなアルゴリズムを使用しています。 GNU C ++ STLは、3つの部分からなるハイブリッドソートを使用します。イントロソート、クイックソート、挿入ソート。 |
C標準では、この並べ替えアルゴリズムの複雑さについては説明されていません。 | この場合、C ++ 11 sort()の最悪の場合、複雑さはO(n logn)です。以前のバージョンのsort()の中には、最悪の場合はO(n2)を使用し、平均的な場合はO(nlogn)を使用するものがあります。 |
この種類の実行時間はsort()よりも長くなります | 実行時間はqsort()よりも短いです。 |
qsort()は、さまざまな種類のデータに対して柔軟ではありません。 | sort()は柔軟性があります。これにより、C配列、C ++ベクトル、C ++両端キュー、およびその他のコンテナーも並べ替えることができます。 |
この種類は、タイプセーフではありません。安全でないvoidポインタを使用してデータにアクセスします。 | この並べ替え手法はより安全です。データにアクセスするために安全でないvoidポインタは必要ありません。 |
-
C++でのバイナリ挿入ソート
バイナリ挿入ソート は、バイナリ検索アルゴリズムを使用して配列内の挿入された要素の正しい位置を見つける挿入ソートの特殊なタイプアップです。 挿入ソートは、配列内の要素の正しい位置を見つけて、それを正しい位置に挿入することによって機能するソート手法です。 二分探索 要素を見つけるために配列の中央を見つけることによって機能する検索手法です。 二分探索の複雑さは対数の順序であるため、検索アルゴリズムの時間計算量も対数の順序に減少します。 バイナリ挿入ソートの実装。このプログラムは単純な挿入ソートプログラムですが、標準の検索手法の代わりにバイナリ検索が使用されます。 例 #include &l
-
C++でのストランドソート
このセクションでは、C++の標準ライブラリを使用して配列またはリンクリストを並べ替える方法を説明します。 C ++には、さまざまな目的に使用できる複数の異なるライブラリがあります。並べ替えもその1つです。 C++関数std::list ::sort()は、リストの要素を昇順で並べ替えます。等しい要素の順序は保持されます。比較のために演算子<を使用します。 例 #include <iostream> #include <list> using namespace std; int main(void) { list<int> l =