C の sort 関数は、配列またはコンテナー内の要素を並べ替えるために使用される関数関数です。ソートは昇順または降順が可能で、整数、浮動小数点、文字型などさまざまな種類のデータをソートできます。 C言語には複数のソート関数が用意されていますが、今回はこれらのソート関数の使い方や特徴を詳しく紹介します。
sort() 関数は、C STL で最もよく使用される並べ替え関数の 1 つであり、その機能は要素を配列に配置することです。またはコンテナです。 sort() 関数の基本的な使い方は次のとおりです。
sort(begin, end);
このうち、begin は配列またはコンテナの最初の要素のアドレス、end は最後の要素のアドレス 1 なので、end最後の要素の後の空のアドレスを指します。 sort() 関数はデフォルトで昇順でソートしますが、降順でソートする必要がある場合は、関数ポインタまたはラムダ式を 3 番目のパラメータとして渡すことができます。
以下は、sort() 関数を使用して整数配列を並べ替える方法を示すサンプル コードです。
#include <iostream> #include <algorithm> using namespace std; int main() { int arr[] = {5, 2, 9, 1, 4, 3, 8, 6, 7}; int n = sizeof(arr) / sizeof(arr[0]); sort(arr, arr + n); for (int i = 0; i < n; i++) { cout << arr[i] << " "; } return 0; }
上記のコードを実行した結果は次のとおりです。
1 2 3 4 5 6 7 8 9
stable_sort() 関数は sort() 関数に似ていますが、同じ値を持つ要素の相対位置がソート後も変更されないようにします。 steady_sort() 関数の使用法は sort() 関数に似ており、関数ポインターまたはラムダ式を 3 番目のパラメーターとして渡すこともできます。以下はサンプル コードです:
#include <iostream> #include <algorithm> using namespace std; int main() { int arr[] = {5, 2, 9, 1, 4, 3, 8, 6, 7}; int n = sizeof(arr) / sizeof(arr[0]); stable_sort(arr, arr + n); for (int i = 0; i < n; i++) { cout << arr[i] << " "; } return 0; }
上記のコードを実行した結果は次のとおりです:
1 2 3 4 5 6 7 8 9
partial_sort( ) 関数は配列を変換できます。または、コンテナー内の要素が部分的にソートされています。つまり、上位 k 個の最小要素が配列の前にソートされます (または、上位 k 個の最大要素が配列の前にソートされます)。使用法は次のとおりです:
partial_sort(begin, middle, end);
begin は配列またはコンテナ内の最初の要素のアドレス、end は最後の要素のアドレス 1、middle は k 番目の要素を指す反復子です。 。 Partial_sort() 関数は、最初の k 個の要素が順序どおりであることのみを保証し、残りの要素の順序は未定義であることに注意してください。以下はサンプル コードです。
#include <iostream> #include <algorithm> using namespace std; int main() { int arr[] = {5, 2, 9, 1, 4, 3, 8, 6, 7}; int n = sizeof(arr) / sizeof(arr[0]); int k = 3; partial_sort(arr, arr + k, arr + n); for (int i = 0; i < k; i++) { cout << arr[i] << " "; } return 0; }
上記のコードを実行した結果は次のとおりです。
1 2 3
nth_element( ) 関数は、コンテナ内の配列または k 番目に小さい (または k 番目に大きい) 要素を選択し、それを配列内の k 番目の位置に配置するために使用されます。使用法は次のとおりです:
nth_element(begin, middle, end);
begin は配列またはコンテナ内の最初の要素のアドレス、end は最後の要素のアドレス 1、middle は k 番目の要素を指す反復子です。 。 nth_element() 関数は、配列の最初の k 要素が順序付けされていることのみを保証し、k 番目の要素は並べ替えられていないことに注意してください。以下はサンプル コードです。
#include <iostream> #include <algorithm> using namespace std; int main() { int arr[] = {5, 2, 9, 1, 4, 3, 8, 6, 7}; int n = sizeof(arr) / sizeof(arr[0]); int k = 3; nth_element(arr, arr + k - 1, arr + n); cout << "第 " << k << " 小的数是:" << arr[k - 1] << endl; return 0; }
上記のコードを実行した結果は次のとおりです。
第 3 小的数是:3
make_heap( ) 関数は配列を変換できます。または、コンテナーがヒープに変換されます。つまり、配列内の要素は、ヒープ操作をサポートするためにバイナリ ヒープの規則に従って並べ替えられます。使用法は次のとおりです:
make_heap(begin, end);
begin は配列またはコンテナの最初の要素のアドレス、end は最後の要素 1 のアドレスです。以下はサンプル コードです:
#include <iostream> #include <algorithm> using namespace std; int main() { int arr[] = {5, 2, 9, 1, 4, 3, 8, 6, 7}; int n = sizeof(arr) / sizeof(arr[0]); make_heap(arr, arr + n); for (int i = 0; i < n; i++) { cout << arr[i] << " "; } return 0; }
上記のコードを実行した結果は次のとおりです:
9 7 8 6 4 3 5 1 2
push_heap( ) 関数は、新しい要素をヒープに挿入し、ヒープのプロパティに合わせてヒープの構造を再構築します。使用法は次のとおりです。
push_heap(begin, end);
begin は配列またはコンテナ内の最初の要素のアドレス、end は最後の要素のアドレスです。挿入された新しい要素はヒープの最後の位置に配置される必要があることに注意してください。以下はサンプル コードです。
#include <iostream> #include <algorithm> using namespace std; int main() { int arr[] = {5, 2, 9, 1, 4, 3, 8, 6, 7}; int n = sizeof(arr) / sizeof(arr[0]); make_heap(arr, arr + n); arr[n] = 0; push_heap(arr, arr + n + 1); for (int i = 0; i < n + 1; i++) { cout << arr[i] << " "; } return 0; }
上記のコードを実行した結果は次のとおりです。
9 7 8 6 4 3 5 1 2 0
pop_heap( ) 関数はヒープを変換するために使用されます。最上位の要素が飛び出し、ヒープの性質に合わせてヒープが再構築されます。使用法は次のとおりです。
pop_heap(begin, end);
begin は配列またはコンテナ内の最初の要素のアドレス、end は最後の要素のアドレスです。ヒープの最上位要素をポップした後、ヒープのサイズを 1 減らす必要があることに注意してください。以下はサンプル コードです。
#include <iostream> #include <algorithm> using namespace std; int main() { int arr[] = {5, 2, 9, 1, 4, 3, 8, 6, 7}; int n = sizeof(arr) / sizeof(arr[0]); make_heap(arr, arr + n); pop_heap(arr, arr + n); n--; for (int i = 0; i < n; i++) { cout << arr[i] << " "; } return 0; }
上記のコードを実行した結果は次のとおりです。
8 7 5 6 4 3 2 1
sort_heap( ) 関数は、ヒープ Sort をソートし、ソートされた配列が昇順であることを確認するために使用されます。使用法は次のとおりです。
sort_heap(begin, end);
begin は配列またはコンテナ内の最初の要素のアドレス、end は最後の要素のアドレスです。 sort_heap() 関数は、ヒープをソートする前に、まず、pop_heap() 関数を呼び出してヒープの先頭要素をポップするため、ソートされた配列のサイズは 1 減らされる必要があることに注意してください。以下はサンプル コードです:
#include <iostream> #include <algorithm> using namespace std; int main() { int arr[] = {5, 2, 9, 1, 4, 3, 8, 6, 7}; int n = sizeof(arr) / sizeof(arr[0]); make_heap(arr, arr + n); sort_heap(arr, arr + n); for (int i = 0; i < n; i++) { cout << arr[i] << " "; } return 0; }
上記のコードを実行した結果は次のとおりです:
1 2 3 4 5 6 7 8 9
概要
この記事では、C の一般的な並べ替え関数について詳しく紹介します。これには、sort()、stable_sort()、partial_sort()、nth_element()、make_heap()、push_heap()、pop_heap()、sort_heap() 関数が含まれます。これらの仕分け機能にはそれぞれ独自の特徴があり、さまざまな仕分けニーズに対応できます。実際のプログラミングでは、特定の状況に応じて適切なソート関数を選択することが非常に重要です。
以上がC++のソート関数の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。