首頁 > 後端開發 > C++ > 主體

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

Mary-Kate Olsen
發布: 2024-11-08 12:24:01
原創
393 人瀏覽過

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

使用C 中的內建函數或自訂方法按列值排序2D 陣列

在C 中,與Java 不同,沒有直接的內建函數可以依特定列值對二維數組進行排序。但是,可以採用各種方法來實現這種所需的排序行為。

使用 C 標準函式庫函數

一種方法涉及利用 std::qsort 函數,它是一種通用排序演算法。透過定義自訂比較器函數,您可以根據列值控制排序邏輯。以下是一個範例實作:

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

int compareArrayColumns(int **lhs, int **rhs) {
  return (*lhs)[0] < (*rhs)[0];
}

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

  std::qsort(arr, 5, sizeof(*arr), (int (*)(const void *, const void *))compareArrayColumns);

  for (int i = 0; i < 5; ++i) {
    std::cout << arr[i][0] << " " << arr[i][1] << std::endl;
  }

  return 0;
}</code>
登入後複製

在此程式碼中,compareArrayColumns 函數用於比較每個陣列行的第一列值。使用 std::qsort 函數執行排序,並列印排序後的二維陣列。

使用自訂方法

另一種方法涉及建立實作所需邏輯的自訂排序函數。以下是使用冒泡排序的範例實作:

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

void bubbleSortByColumn(int arr[][2], int size) {
  for (int i = 0; i < size; ++i) {
    for (int j = 0; j < size - 1; ++j) {
      if (arr[j][0] > arr[j + 1][0]) {
        int temp[2];
        temp[0] = arr[j][0];
        temp[1] = arr[j][1];
        arr[j][0] = arr[j + 1][0];
        arr[j][1] = arr[j + 1][1];
        arr[j + 1][0] = temp[0];
        arr[j + 1][1] = temp[1];
      }
    }
  }
}

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

  int size = sizeof(arr) / sizeof(arr[0]);
  bubbleSortByColumn(arr, size);

  for (int i = 0; i < size; ++i) {
    std::cout << arr[i][0] << " " << arr[i][1] << std::endl;
  }

  return 0;
}</code>
登入後複製

在此程式碼中, bubbleSortByColumn 函數實作了一個簡單的冒泡排序演算法,該演算法迭代數組並根據第一列值交換行。然後列印排序後的二維數組。

方法的選擇取決於應用程式的特定要求和效能考量。

以上是如何在 C 中按列值對二維數組進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板