参数含义
void qsort (void* base, size_t num, size_t size,int (*compar)(const void*,const void*))
1.首元素地址base
得到首元素地址。
2.元素个数num
3.元素大小size
sizeof()函数得到大小。
4.自定义比较函数cmp
按照怎么的方式进行比较
案例
病人的医治
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
// 定义病人结构体
typedef struct {
char name[100]; // 姓名,输入字符串时不能使用string来定义
int severity; // 病重程度
int age; // 年龄
} Patient;
// 比较函数用于排序
int compare(const void* a, const void* b) {
Patient* patientA = (Patient*)a;
Patient* patientB = (Patient*)b;
// 按照病重程度排序
if (patientA->severity != patientB->severity) {
return patientB->severity - patientA->severity;
}
// 病重程度相同,则按照年龄排序
if (patientA->age != patientB->age) {
return patientB->age - patientA->age;
}
// 年龄相同,则按照姓名排序
return strcmp(patientA->name, patientB->name);
}
int main() {
int n; // 病人数量
scanf("%d", &n);
Patient patients[n]; // 定义存储病人信息的数组
// 输入病人信息
for (int i = 0; i < n; i++) {
scanf("%s%d%d", patients[i].name, &(patients[i].severity), &(patients[i].age));
}
// 使用快速排序对病人信息进行排序
qsort(patients, n, sizeof(Patient), compare);
// 输出排序后的病人信息
for (int i = 0; i < n; i++) {
printf("%s %d %d\n", patients[i].name, patients[i].severity, patients[i].age);
}
return 0;
}
最后别忘了头文件#include <stdlib.h> 当然也可以用万能头文件#include<bits/stdc++.h>
注意当需要利用输入的字符串进行比较时,必须使用char类型来定义,不能使用string定义。