二维数组按第一列升序,第二列降序的顺序排序,使用快排qsort

二维数组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';
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值