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
对其类型系统采用的方法。
我想知道如何使用单个排序函数从 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
对其类型系统采用的方法。