如何对结构的2D动态数组进行排序
发布时间:2020-12-16 09:47:43 所属栏目:百科 来源:网络整理
导读:我在排序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)); } 我想使
我在排序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; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- [Swift]LeetCode926. 将字符串翻转到单调递增 | Flip Strin
- Flash与JavaScript通信
- 《.Net设计规范-约定、惯用法与模式》部分摘记
- Cocos2d-3.x_基本数据类型(cocos2d::Map)
- Objective-C:基于字典条目排序NSDictionary的关键字
- 在Ruby中创建一个Expando对象
- 《不靠谱2.x》001.CCObject
- ruby – 是什么导致EventMachine :: ConnectionNotBound?
- Cocos2d-js 学习(二): cc.Sprite 简单API记录
- xml – 是否为传统上没有空的坏习惯的元素编写自我关闭标签