首页 > 后端开发 > C++ > 如何在 C 中按列值对二维数组进行排序?

如何在 C 中按列值对二维数组进行排序?

Mary-Kate Olsen
发布: 2024-11-08 12:24:01
原创
451 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板