在我们解题过程中,很多情况下,排序是必不可少的一环。
对于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;
}