C语言qsort排序结构体数组
时间: 2023-03-20 08:03:21 浏览: 113
好的,关于C语言中使用qsort对结构体数组进行排序,可以使用以下步骤:
首先,需要定义一个比较函数,用于指定排序的规则。比较函数需要接收两个参数,分别是待比较的两个结构体指针,返回一个整型值。如果返回值小于0,则表示第一个参数应该排在第二个参数之前;如果返回值大于0,则表示第一个参数应该排在第二个参数之后;如果返回值等于0,则表示两个参数相等,不需要交换位置。
例如,假设我们有如下的结构体定义:
```
struct student {
char name[20];
int age;
float score;
};
```
那么对应的比较函数可以定义如下:
```
int cmp(const void* a, const void* b) {
struct student* s1 = (struct student*)a;
struct student* s2 = (struct student*)b;
if (s1->score > s2->score) {
return -1;
} else if (s1->score < s2->score) {
return 1;
} else {
return 0;
}
}
```
上面的比较函数指定了按照分数从高到低排序。
然后,在主函数中,可以定义一个结构体数组,并使用qsort函数进行排序。qsort函数需要四个参数,分别是待排序的数组首地址、数组中元素的个数、每个元素的大小、比较函数的地址。
例如,假设我们定义了如下的结构体数组:
```
struct student students[] = {
{"Tom", 18, 89},
{"Bob", 20, 78},
{"Alice", 19, 92},
{"Mike", 19, 83},
{"Jack", 18, 87},
};
int n = sizeof(students) / sizeof(struct student);
```
那么对应的排序代码可以如下编写:
```
qsort(students, n, sizeof(struct student), cmp);
```
经过排序后,数组中的元素按照指定的规则排列。