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

星际宝贝

我在排序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的compare函数:

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()函数执行什么操作才能使其正常工作?

顺便说一句,我只需要排序,list[x][0]因为稍后我将添加更多元素。

(我基于另一个Stackoverflow帖子的排序代码)

伊娃(Ivaylo Strandjev)

将比较功能更改为:

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;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用/通过动态属性对结构数组进行排序

来自分类Dev

按C中的第一列对动态分配的2D数组进行排序

来自分类Dev

如何用numpy对3D数组的内部2d数组进行排序?

来自分类Dev

如何在Rust中的结构内实现动态2D数组?

来自分类Dev

如何动态创建2D数组?

来自分类Dev

如何通过第一个子数组值对数组数组(2D数组)进行排序

来自分类Dev

如何使用C ++中的sort函数对2D数组进行排序?

来自分类Dev

如何按降序对2d数组的一半进行排序(numpy)

来自分类Dev

如何使用特定的列索引对numpy 2D数组行进行降序或升序排序

来自分类Dev

如何在C中对2D数组中的字符串进行排序

来自分类Dev

如何使用C ++中的sort函数对2D数组进行排序?

来自分类Dev

如何基于两列的值在Java中对2D数组进行排序

来自分类Dev

如何通过Java中的元素数对2D字符串数组进行排序

来自分类Dev

使用Java比较器对2d数组进行排序

来自分类Dev

以升序对2d numpy数组的行进行排序

来自分类Dev

按多列对numpy 2d数组进行排序

来自分类Dev

在2D数组Java上进行冒泡排序

来自分类Dev

使用推力对Cuda中的2D数组进行排序

来自分类Dev

使用qsort对2d数组进行排序-段错误

来自分类Dev

2D数组,按总和对行进行排序

来自分类Dev

在C ++中对2D数组进行排序

来自分类Dev

基于列对2D向量数组进行排序

来自分类Dev

通过数学方程对2D数组进行排序

来自分类Dev

如何使用qsort对结构数组进行排序

来自分类Dev

如何使用OpenACC在C中执行结构的2D动态数组的手动深度复制

来自分类Dev

如何在2D数组上使用numpy.argsort对另一个2D数组进行排序

来自分类Dev

如何在2D数组上使用numpy.argsort对另一个2D数组进行排序

来自分类Dev

如何在C中填充2D结构数组?

来自分类Dev

如何分配指向结构的2D指针数组

Related 相关文章

  1. 1

    如何使用/通过动态属性对结构数组进行排序

  2. 2

    按C中的第一列对动态分配的2D数组进行排序

  3. 3

    如何用numpy对3D数组的内部2d数组进行排序?

  4. 4

    如何在Rust中的结构内实现动态2D数组?

  5. 5

    如何动态创建2D数组?

  6. 6

    如何通过第一个子数组值对数组数组(2D数组)进行排序

  7. 7

    如何使用C ++中的sort函数对2D数组进行排序?

  8. 8

    如何按降序对2d数组的一半进行排序(numpy)

  9. 9

    如何使用特定的列索引对numpy 2D数组行进行降序或升序排序

  10. 10

    如何在C中对2D数组中的字符串进行排序

  11. 11

    如何使用C ++中的sort函数对2D数组进行排序?

  12. 12

    如何基于两列的值在Java中对2D数组进行排序

  13. 13

    如何通过Java中的元素数对2D字符串数组进行排序

  14. 14

    使用Java比较器对2d数组进行排序

  15. 15

    以升序对2d numpy数组的行进行排序

  16. 16

    按多列对numpy 2d数组进行排序

  17. 17

    在2D数组Java上进行冒泡排序

  18. 18

    使用推力对Cuda中的2D数组进行排序

  19. 19

    使用qsort对2d数组进行排序-段错误

  20. 20

    2D数组,按总和对行进行排序

  21. 21

    在C ++中对2D数组进行排序

  22. 22

    基于列对2D向量数组进行排序

  23. 23

    通过数学方程对2D数组进行排序

  24. 24

    如何使用qsort对结构数组进行排序

  25. 25

    如何使用OpenACC在C中执行结构的2D动态数组的手动深度复制

  26. 26

    如何在2D数组上使用numpy.argsort对另一个2D数组进行排序

  27. 27

    如何在2D数组上使用numpy.argsort对另一个2D数组进行排序

  28. 28

    如何在C中填充2D结构数组?

  29. 29

    如何分配指向结构的2D指针数组

热门标签

归档