qsort 排序 int p[7][2]二维数组,按照二维降序,如果二维一样,那就一维升序
时间: 2024-11-18 14:16:01 浏览: 1
`qsort` 是 C 标准库中的快速排序函数,通常用于一维数组的排序。如果你想对一个 `int p[7][2]` 的二维数组按照降序首先排序第二维度,然后在一维相同时按升序排序第一维度,你需要自定义一个比较函数,并将其作为第三个参数传递给 `qsort`。
这里是一个简单的思路:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义比较函数,返回值小于0表示第一个元素应该排在前面,大于0则相反
int compare(const void *a, const void *b) {
int arr_a[] = { ((const int (*)[2]) a)[0][1], ((const int (*)[2]) a)[0][0] };
int arr_b[] = { ((const int (*)[2]) b)[0][1], ((const int (*)[2]) b)[0][0] };
// 首先按照第二维度降序排列
if (arr_a[0] > arr_b[0])
return -1;
else if (arr_a[0] < arr_b[0])
return 1;
// 第二维度相同,则按照第一维度升序排列
return arr_a[1] - arr_b[1];
}
int main() {
int p[7][2] = {{5, 3}, {2, 4}, {9, 8}, {6, 1}, {1, 7}, {8, 5}, {4, 6}};
int size = sizeof(p) / sizeof(p[0]);
// 使用 qsort 和我们定义的比较函数对二维数组进行排序
qsort(p, size, sizeof(p[0]), compare);
// 打印排序后的结果
for (int i = 0; i < size; i++) {
printf("p[%d][0]: %d, p[%d][1]: %d\n", i, p[i][0], i, p[i][1]);
}
return 0;
}
```
阅读全文