c - 在 C 中对结构数组使用基数排序/计数排序?

标签 c arrays struct radix-sort counting-sort

我有一个包含 uint32_t 类型的结构数组。知道数组的最大值和最小值后,我想实现计数排序或基数排序以根据 uint32_t 对数组进行排序。值的范围可能非常大。我不知道如何对结构数组而不是整数进行排序。还是有更好的排序算法?谢谢!

最佳答案

如果您使用 qsort ,你需要提供一个比较函数,像这样

struct Foo
{ 
   uint32_t index;
   other stuff;
}


int compareMyType (const void * a_, const void * b_)
{
  const Foo* a = a_;
  const Foo* b = b_;

  if ( a->index <  b->index ) return -1;
  if ( a->index == b->index ) return 0;
  if ( a->index >  b->index ) return 1;
}

Foo foos[100];
qsort(foos,100,compareMyType );

基数排序对于整数可能更快,但如果您真的关心效率,您不会对结构数组排序,而是对结构指针数组排序,因为在周围复制数据会产生大量开销。

关于c - 在 C 中对结构数组使用基数排序/计数排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30131560/

相关文章:

c - 将内存重新分配到空引用

javascript - 如何使用 IndexString 对 Javascript 数组进行排序,例如 : a ['String' ]

javascript - 如何使用 javascript 填充数组中缺失的月份

c - 如何将字符串数组传递给该程序中的函数?

c - 从文件中读取未知数量的结构 - C

java - 使用 Amorino 从 Arduino 向 Android 发送和接收数据结构(反之亦然)

c - 解决使用C的strcmp函数比较两个不同结构的元素时的警告

在 C 中将 UTF-16LE 转换为 UTF-8

c++ - 将 4 个原始字节转换为 32 位 float

objective-c - 你怎么称呼在有条件的情况下做作业?