首頁  >  文章  >  後端開發  >  如何在 C 中按列值對二維數組進行排序?

如何在 C 中按列值對二維數組進行排序?

Linda Hamilton
Linda Hamilton原創
2024-11-06 01:43:02289瀏覽

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

用C 語言對二維陣列進行排序:內建函數與自訂實作

簡介

簡介

在C 中對多維數組進行排序可能是一項複雜的任務。本文探討了內建函數的功能,並提供了一個自訂實現,用於根據列值對 2D 數組進行有效排序。

內建函數

C 提供用於對多維數組進行排序的有限內建函數。 std::qsort 函數允許對任何類型的固定大小數組進行排序。但是,它不提供對多列數組進行排序的直接功能。

自訂實作

<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))));
}
對於多列排序,可以使用比較器函數的自訂實作被利用。這種方法需要調整內建的 std::sort 函數,該函數預設按升序對元素進行操作。

比較器函數將兩個陣列作為輸入,並根據所需的列值對它們進行比較。在您的情況下,您希望透過比較第一列值來對二維數組進行排序。這是一個 C 實作:

在此比較器中,我們級聯三元語句來比較第一列值,然後比較第二列值以打破平局。

用法
<code class="cpp">std::sort(std::begin(ar), std::end(ar), comparator);

要使用比較器對陣列進行排序,您可以使用陣列和比較器作為參數呼叫std::sort 函數:

範例
<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 中按列值對二維數組進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn