二维数组a[m][2];,长度为length
1.调用qsort函数
qsort(a,length,sizeof(a[0]),cmp);
如果二维数组是int型的,也可以写成2*sizeof(int),总之就是传进去一组数据
2.cmp函数
依旧是熟悉的int cmp(const void* A.const void* B)
return的部分使用三目运算符
return ((int*)A)[0]==((int*)B)[0]?((int*)B)[1]>((int*)A)[1]:((int*)A)[0]>((int*)B)[0];
意思是 ((int*)A)[0]和((int*)B)[0]相等吗?,如果第一列相等的话,就比较第二列,((int*)B)[1]>((int*)A)[1],其中因为是想让第二列降序排列,所以B-A,如果第一列不相等的话,就按照第一列排序,((int*)A)[0]>((int*)B)[0]
3.三目运算符
x==y?yes:no
问号前面的是用来判断的式子,成立的话执行:左边的式子,不成立的话执行:右边的式子
4.案例
int cmp(const void* a, const void* b) {
return ((int*)a)[0] == ((int*)b)[0] ? ((int*)b)[1] > ((int*)a)[1] : ((int*)a)[0] > ((int*)b)[0];
}
int v2[6][2] = {{5, 4}, {6, 4}, {6, 7}, {2, 3}, {5, 2}, {1, 8}};
int hang = sizeof(v2) / sizeof(v2[0]);
qsort(v2, hang, sizeof(v2[0]), cmp);
int lie = sizeof(v2[0]) / sizeof(v2[0][0]);
for(int i = 0; i < hang; ++i){
for(int j = 0; j < lie; ++j) {
cout << v2[i][j] << ", ";
}
cout << '\n';
}