ホームページ  >  記事  >  バックエンド開発  >  C++のソート関数の詳細説明

C++のソート関数の詳細説明

WBOY
WBOYオリジナル
2023-11-18 15:51:151201ブラウズ

C++のソート関数の詳細説明

C の sort 関数は、配列またはコンテナー内の要素を並べ替えるために使用される関数関数です。ソートは昇順または降順が可能で、整数、浮動小数点、文字型などさまざまな種類のデータをソートできます。 C言語には複数のソート関数が用意されていますが、今回はこれらのソート関数の使い方や特徴を詳しく紹介します。

  1. sort() 関数

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
  1. stable_sort() 関数

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
  1. partial_sort() function

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
  1. nth_element() function

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
  1. make_heap() function

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
  1. push_heap() function

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
  1. pop_heap() function

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
  1. sort_heap() function

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。