C语言一个排序函数从2个条件中选择

C Language One Sorting Function Chose From 2 Criteria

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

表现得像 qsort

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

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

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

变体结构

替代方案是联合/结构

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

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

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