使用内置函数或替代方法对 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中文网其他相关文章!