我有一个结构:
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动态数组进行排序所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)