如何对结构的2D动态数组进行排序

如何对结构的2D动态数组进行排序,第1张

概述我在排序2D动态结构数组时遇到问题. 我有一个结构: typedef struct abc{ int total;} abc; 和动态2D数组: list = (abc**)malloc(listSize * sizeof(abc*)); for (int i = 0; i < listSize; i++) { list[i] = (abc*)mallo 我在排序2D动态结构数组时遇到问题.

我有一个结构:

typedef struct abc{    int total;} abc;

和动态2D数组:

List = (abc**)malloc(ListSize * sizeof(abc*));    for (int i = 0; i < ListSize; i++)    {        List[i] = (abc*)malloc(ListSize2* sizeof(abc));    }

我想使用排序算法:

qsort(List,ListSize,sizeof List[0],cmp);

和qsort的比较函数:

int cmp(const voID *l,const voID *r){    const abc *a = *(const abc **)l;    const abc *b = *(const abc **)r;    return a[0].total > b[0].total;}

但问题是虽然我认为它适用于一个小的列表(如大约5个整数),如果列表有点大,它无法正确排序.我该怎么做cmp()函数才能正常工作?

顺便说一句,我只需要对列表[x] [0]进行排序,因为我稍后会添加更多元素.

(I’m basing my sorting code from another Stackoverflow post)

解决方法 将比较功能更改为:

int cmp(const voID *l,const voID *r){    const abc *a = *(const abc **)l;    const abc *b = *(const abc **)r;    return a[0].total - b[0].total;}

使用qsort,如果第一个值小于正值(如果它更大),则预期比较函数应返回负值;如果两个值相等,则返回0.

编辑:感谢WhozCraig:如果你认为你可能会遇到或溢出,你可以选择一个更安全的版本:

int cmp(const voID *l,const voID *r){    const abc *a = *(const abc **)l;    const abc *b = *(const abc **)r;    if (a[0].total < b[0].total) {       return -1;    } else if (a[0].total > b[0].total) {       return 1;    } else {       return 0;    }}
总结

以上是内存溢出为你收集整理的如何对结构的2D动态数组进行排序全部内容,希望文章能够帮你解决如何对结构的2D动态数组进行排序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1215421.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存