C语言从2个标准中选择一个排序函数

标签 c sorting types structure criteria

我想知道如何使用单个排序函数来从两个不同的标准中进行排序。 我正在考虑实现具有指向另一个函数(Criteria)的指针作为参数的排序函数(Sort)。该函数 Criteria 使用结构为我提供(比方说)学生的姓名或年龄。所以一个函数返回两种类型的数据。我认为它必须是一个空白。我想使用冒泡排序,但我不知道如何实现 Criteria 函数,因为我希望它返回 char 或 int 值。

最佳答案

表现得像qsort

qsort 通过使用一个指向比较函数的指针来解决这个问题,该函数使用两个指向结构的指针(左和右)并比较指向的值:

compare( left, right ){
  if( left->field < right->field )
     return -1;
  if( left->field > right->field )
     return 1;
  return 0;
}

左侧和右侧的类型作为 void* 传入,但转换为具体类型。 不同的比较实现给出不同的字段。

变体结构

替代方案是 union/结构

 struct data {
    enum Types type;
    union {
        double dblVal;
        int    intVal;
        ....;
    } u;
 };

类型表示 union 中数据的类型,然后可以适本地读取成员。

这是 lua 为其类型系统采用的方法。

关于C语言从2个标准中选择一个排序函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35668406/

相关文章:

java - 我有一个 treemap<Integer, Person> 其中 Integer 是每个人的唯一属性,我想打印按另一个属性排序的元素

haskell - 给定 Haskell 类型签名,是否可以自动生成代码?

c - c中的动态链接库找不到-lmean

c - MexFile 导致 "Assertion detected"错误 - mexfiles 中的 memcpy 有问题吗?

Linux 排序顺序错误

c++ - 确定传递给模板函数的变量类型

java - Java中泛型参数类的反射?

c - 指针和数据结构

c - 修复 WSL 上的 pthread_create 引用错误

c - 从给定的 C 中将 char * 初始化为 nothing 的有效方法是什么?