Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 按出生日期对患者结构进行排序_C_Sorting_Struct - Fatal编程技术网

C 按出生日期对患者结构进行排序

C 按出生日期对患者结构进行排序,c,sorting,struct,C,Sorting,Struct,我有一个结构 typedef struct { char name[100]; int born_date; }patient; 我必须写一个函数,它将按出生日期对数组进行排序。 函数看起来像 void rendez(patient-patients[],int-n){}其中n数字是数组长度&patients[]数组包括关于患者的数据。 我知道这不是一项艰巨的任务,但我仍然在学习这门语言(C)。 我可以使用qsort函数,但这对我来说是新的。 我听每个提示&感谢您的帮助qsor

我有一个结构

typedef struct {
    char name[100];
    int born_date;
}patient;
我必须写一个函数,它将按出生日期对数组进行排序。 函数看起来像
void rendez(patient-patients[],int-n){}
其中n数字是数组长度&patients[]数组包括关于患者的数据。 我知道这不是一项艰巨的任务,但我仍然在学习这门语言(C)。 我可以使用qsort函数,但这对我来说是新的。
我听每个提示&感谢您的帮助

qsort使用用户定义的比较。您需要一个助手函数来比较两个项目

int compare_patient_dob(void *a, void *b)
{
    patient *pa = (patient *) a ;
    patient *pb = (patient *) b ;

    // Assuming born_dates are comparable, e.g., YYYYMMDD
    return pa->born_date - pb->born_date ;
}
...
// Later in the rendez function.
    qsort(patients, n, sizeof(patients[0], compare_patient_dob) ;

尝试从迭代数组中的所有元素并打印它们开始。之后,您可以在for循环中添加额外的逻辑,以将最高/最低出生日期及其索引保留在内存中。欢迎使用SO的可能副本。学习是需要实践的。请告诉我们您尝试了什么以及您遇到了什么困难。如果您已经找到了
qsort
,也许您可以尝试使用它,并向我们展示出哪里出了问题。没有qsort的任务是可以完成的?您可以编写自己的排序。在这种情况下,考虑更简单的实现(不太有效的SOR)——例如,冒泡排序等。@ DASH-O,您不需要强制转换为<代码>(Author *),最好是让编译器检查正确的指针类型,而不是强制在将来修改中隐藏一个错误。在“C”中,运行时没有数据来验证铸件。将其与Java、C#和其他语言进行比较,它们可以在运行时确定对象类。如果没有显式地将void*指针强制转换为“patient*”,代码将无法编译。如果将原型中的指针更改为“client*”,则它将与qsort的原型不匹配。