qsort函数对二维数组的排序Cmp函数理解
在我们解题过程中,很多情况下,排序是必不可少的一环。
对于C语言来说,排序函数qsort就显得非常重要。
本文介绍一维数组、二维数组的qsort排序,其中二维数组的Cmp函数的写法做了详细注释。
qsort函数原型介绍:
/* arr:排序目标
size: 排序个数
sizeof(a[0]):排序元素大小
cmp:排序规则函数
*/
qsort(arr, (size_t)size, sizeof(a[0]), Cmp)
一维数组排序:
注意:如果是字符串,则按照ASCII升序排序。
//从小到大排序
int Cmp(const void *a, const void *b) {
int tempA = *(int *)a;
int tempB = *(int *)b;
return tempA - tempB;
}
int main(){
int arr[100] = {0};
qsort(arr, 100, sizeof(arr[0]), Cmp);
return 0;
}
二维数组排序:
下面主要写了对二维数组的第一维和第二维排序的方法
int Cmp(const void *a, const void *b) {
// (1)对二维数组的第一维排序
// 写法1:解引用一次变为一维指针,用数组的值相减
return (*(int **)a)[0] - (*(int **)b)[0];
// 写法2: 对二级指针解引用两次得到第一列值
//return *(*(int **)a) - *(*(int **)b);
//(2) 对二维数组的第二维排序
return (*(int **)a)[1] - (*(int **)b)[1];
}
int main(){
int arr[4][2] = {
{5, 3}, {3, 1}, {1, 4}, {4, 2}};
qsort(arr, 4, sizeof(arr[0]), Cmp);
for(int i = 0; i < 4; i++) {
printf("%d, %d\n", arr[i][0], arr[i][1]);
}
return 0;
}