【发布时间】:2015-07-19 19:49:24
【问题描述】:
我有一个包含 uint32_t 类型的结构数组。知道数组的最大值和最小值后,我想实现计数排序或基数排序以根据 uint32_t 对数组进行排序。值的范围可能非常大。我不知道如何对结构数组而不是整数进行排序。或者有没有更好的算法来进行这种排序?谢谢!
【问题讨论】:
-
首先:使用包含 int 的结构实现更简单的排序,例如冒泡排序。一旦你弄清楚如何做到这一点,你就可以继续进行基数排序。不要试图一步完成所有事情。
-
如果您的结构中包含除
uint32_t之外的其他成员,您希望将其用作排序键,那么标准计数排序是不可能的,因为它依赖于具有相同值的整数的不可区分性.如您所说,如果值的范围很大,那么无论如何计数排序可能都是一个坏主意,因为它在时间和内存中按 O(R+N) 缩放,其中 R 是 range正在排序的值。
标签: c arrays struct radix-sort counting-sort