qsort 排序二维数组,怎么写
时间: 2024-11-18 17:16:30 浏览: 25
二维数组排序
在C语言中,`qsort`函数默认是对一维数组进行排序,但它也可以通过自定义比较函数适用于二维数组。假设你要对二维整型数组按照指定规则排序,比如先按第一列降序,再按第二列升序,你可以这样做:
首先,编写一个比较函数`compare`,它接收两个指向二维数组指针的参数,并根据需要的排序规则进行比较:
```c
int compare(const void *a, const void *b) {
int arr_a[] = { ((const int (*)[2]) a)[0], ((const int (*)[2]) a)[1] };
int arr_b[] = { ((const int (*)[2]) b)[0], ((const int (*)[2]) b)[1] };
if (arr_a[0] > arr_b[0]) {
return 1; // 升序排列,arr_a应放在arr_b之前
} else if (arr_a[0] < arr_b[0]) {
return -1; // 降序排列,arr_a应放在arr_b之后
} else { // 第一行相同,按第二行排序
if (arr_a[1] > arr_b[1]) {
return 1;
} else if (arr_a[1] < arr_b[1]) {
return -1;
}
return 0; // 同一行也相同,保持不变
}
}
```
接下来,在`main`函数中调用`qsort`,传入数组、数组长度、每个元素的大小以及上面定义的比较函数:
```c
void* array_to_sort = p; // 假设 p 是你的二维数组
size_t length = sizeof(p) / sizeof(*p);
size_t element_size = sizeof(p[0][0]); // 或者 sizeof(int)
qsort(array_to_sort, length, element_size, compare);
```
记住,这个例子假设`p`是已经初始化过的二维整数数组。如果数组动态分配或大小未知,你需要相应地调整内存管理部分。
阅读全文