首页  >  文章  >  后端开发  >  如何使用内置函数或自定义方法对 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