qsort()函数用于数组排序及cmp参数的使用方法

函数用法:

首先是qsort()的原型:

void qsort(void *base,int nelem,int size,int (*cmp)(const void *,const void * ))

参数说明

  • base – 指向要排序的数组的第一个元素的指针。
  • nelem – 由 base 指向的数组中元素的个数。
  • size – 数组中每个元素的大小,以字节为单位。
  • cmp – 用来比较两个元素的函数。

其中,函数cmp原型如下:


int cmp(const void * elem1,const void * elem2)
{
    int * p1 = (int *) elem1;
    int * p2 = (int *) elem2;
    return *p1-*p2;
}

对于cmp函数的参数 *elem1与 *elem2:
1)如果 *elem1应该排在 *elem2前面,则函数返回值为负整数
2)如果 *elem1和 *elem2哪个排在前面都行,则函数返回值为0
3)如果 *elem1应该排在 *elem2后面,则函数返回值为正整数

特别地,需要对二维数组进行按列进行排序时:

//二维指针int** a表示存放一个指针的地址
int cmp(const void *a,const void *b){
    int *a1=*(int**)a;//将二维数组a的值赋值给a1
    int *b1=*(int**)b;//b1[1]、a1[1]表示二维数组的列
    return b1[1]-a1[1];//按行排序则为a1[0]
}

出处:

在leetcode上写贪心算法题时遇到的背包问题:描述
计算收益的思路很简单,但一直写不出好的排序方法,直到发现可以用qsort函数进行排序。

附上参考答案:

int cmp(const void *a, const void *b)
{
    int *pa=*(int **)a;
    int *pb=*(int **)b;
    return (pb[1])-(pa[1]);
}
int maximumUnits(int** boxTypes, int boxTypesSize, int* boxTypesColSize, int truckSize){
    int res=0;
    int min;
    qsort(boxTypes,boxTypesSize,sizeof(int*),cmp);
    for (int i=0;i<boxTypesSize;i++) 
    {
        min=fmin(boxTypes[i][0],truckSize);
        truckSize-=min;
        res+=min*boxTypes[i][1];
    }
    return res;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值