C で 2D 配列を列の値で並べ替えるにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-06 01:43:02
オリジナル
289 人が閲覧しました

How to Sort a 2D Array in C   by Column Values?

C での 2D 配列のソート : 組み込み関数とカスタム実装

はじめに

C での多次元配列のソートは複雑な作業になる場合があります。この記事では、組み込み関数の機能を検討し、列の値に基づいて 2D 配列を効果的に並べ替えるためのカスタム実装を提供します。

組み込み関数

C は、多次元配列をソートするための限られた組み込み関数。 std::qsort 関数を使用すると、任意の型の固定サイズの配列を並べ替えることができます。ただし、複数列の配列を並べ替えるための直接的な機能は提供しません。

カスタム実装

複数列の並べ替えの場合、コンパレータ関数を使用したカスタム実装が可能です。活用されている。このアプローチでは、組み込みの std::sort 関数を調整する必要があります。この関数は、デフォルトで要素を昇順で処理します。

コンパレータ関数は 2 つの配列を入力として受け取り、目的の列値に基づいてそれらを比較します。あなたの場合、最初の列の値を比較することによって 2D 配列をソートしたいと考えています。 C の実装は次のとおりです。

<code class="cpp">int comparator(int const *lhs, int const *rhs) {
    return (lhs[0] < rhs[0]) ? -1
        : ((rhs[0] < lhs[0]) ? 1
        : (lhs[1] < rhs[1] ? -1
        : ((rhs[1] < lhs[1] ? 1 : 0))));
}
ログイン後にコピー

このコンパレーターでは、3 項ステートメントをカスケードして最初の列の値を比較し、次に 2 番目の列の値を比較して関係を解消します。

使用法

コンパレータを使用して配列を並べ替えるには、 std::sort 関数を呼び出すことができます。引数として配列とコンパレータを使用します:

<code class="cpp">std::sort(std::begin(ar), std::end(ar), comparator);
ログイン後にコピー

Example

カスタム並べ替えを示す例は次のとおりです。実装:

<code class="cpp">#include <iostream>
#include <algorithm>

int ar[10][2] = {
    {20, 11},
    {10, 20},
    {39, 14},
    {29, 15},
    {22, 23}
};

int main() {
    int comparator(int const *lhs, int const *rhs);

    // Sort the array
    std::sort(std::begin(ar), std::end(ar), comparator);

    // Display the sorted array
    for (int i = 0; i < 10; i++) {
        std::cout << ar[i][0] << " " << ar[i][1] << '\n';
    }

    return 0;
}</code>
ログイン後にコピー

出力:

10 20
20 11
22 23
29 15
39 14
ログイン後にコピー

結論

一方、C には専用の組み込み関数がありません。複数列配列のソート、コンパレータ関数を使用したカスタム実装により、効率的で柔軟なソリューションが提供されます。このアプローチにより、必要な並べ替え基準を指定し、特定の要件に基づいて並べ替え動作をカスタマイズできます。

以上がC で 2D 配列を列の値で並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!