用 C 语言对二维数组进行排序:内置函数和自定义实现
简介
在 C 中对多维数组进行排序可能是一项复杂的任务。本文探讨了内置函数的功能,并提供了一个自定义实现,用于根据列值对 2D 数组进行有效排序。
内置函数
C 提供用于对多维数组进行排序的有限内置函数。 std::qsort 函数允许对任何类型的固定大小数组进行排序。但是,它不提供对多列数组进行排序的直接功能。
自定义实现
对于多列排序,可以使用比较器函数的自定义实现被利用。这种方法需要调整内置的 std::sort 函数,该函数默认按升序对元素进行操作。
比较器函数将两个数组作为输入,并根据所需的列值对它们进行比较。在您的情况下,您希望通过比较第一列值对二维数组进行排序。这是一个 C 实现:
<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)))); }
在此比较器中,我们级联三元语句来比较第一列值,然后比较第二列值以打破平局。
用法
要使用比较器对数组进行排序,您可以使用数组和比较器作为参数:
<code class="cpp">std::sort(std::begin(ar), std::end(ar), comparator);
示例
这是一个演示自定义排序的示例实现:
<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中文网其他相关文章!