我想知道如何使用单个排序函数来从两个不同的标准中进行排序。 我正在考虑实现具有指向另一个函数(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/