首頁  >  文章  >  後端開發  >  如何使用內建函數或自訂方法對 C 中的二維數組進行排序?

如何使用內建函數或自訂方法對 C 中的二維數組進行排序?

DDD
DDD原創
2024-11-06 04:06:02817瀏覽

How do I sort a 2D array in C   using built-in functions or custom methods?

使用內建函數或替代方法對C 中的2D 數組進行排序

在C 中對2D 數組進行排序提出了獨特的挑戰,因為std::sort() 等內建函數通常是為一維數組設計的。但是,在某些特定情況下,您可能想要根據特定條件對 2D 陣列進行排序,例如僅比較第一列值。

利用std::qsort

雖然C 缺乏用於多列排序的直接內建函數,但std::qsort() 提供了一個通用的解決方案。此函數接受一個指向陣列的指標、陣列的大小、陣列中元素的大小、一個比較函數。透過提供自訂比較函數,您可以根據特定陣列元素指定排序條件。

自訂排序的比較函數

比較函數必須傳回整數結果基於兩個陣列元素的比較。對於二維數組,您需要使用指標算術存取各個元素。考慮以下範例:

<code class="cpp">int qsort_compare(const void *arg1, const void *arg2) {
  int const *lhs = static_cast<int const*>(arg1);
  int const *rhs = static_cast<int const*>(arg2);
  return (lhs[0] < rhs[0]) ? -1
       : ((rhs[0] < lhs[0]) ? 1
       : (lhs[1] < rhs[1] ? -1
       : ((rhs[1] < lhs[1] ? 1 : 0))));
}

此比較器函數比較第一個元素(相當於第一列值)並根據結果傳回適當的排序。

範例實作

結合std::qsort() 和自訂比較函數,您可以在C 中對二維陣列進行排序,如下所示:

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

using namespace std;

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

  qsort(ar, 5, sizeof(*ar), qsort_compare);

  cout << "Sorted 2D Array:" << endl;
  for (int i = 0; i < 5; i++) {
    cout << ar[i][0] << " " << ar[i][1] << endl;
  }

  return 0;
}</code>

輸出:

Sorted 2D Array:
10 20
20 11
22 23
29 15
39 14

此方法為C 語言排序2D 陣列提供了全面且高效的解決方案,儘管它需要創建和使用自定義比較函數。

以上是如何使用內建函數或自訂方法對 C 中的二維數組進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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