结构体排序sort结构体里面定义东西用sort排序
时间: 2024-10-21 21:11:45 浏览: 22
c++ qsort 与sort 对结构体排序实例代码
在C语言中,如果你想对包含自定义数据类型的结构体数组进行排序,通常需要提供一个比较函数(也称为“谓词”),因为标准库函数`sort()`(如`qsort()`)本身并不知道如何直接比较结构体元素。这个比较函数会告诉`sort()`函数如何根据结构体内的某个成员字段来进行排序。
例如,假设你有一个名为`Person`的结构体,其中包含姓名`name`和年龄`age`:
```c
struct Person {
char name[50];
int age;
};
```
为了按年龄排序这样的结构体数组,你需要定义一个比较函数`compare_persons(const void* a, const void* b)`,它接受两个`Person`指针作为参数,并返回一个整数表示它们的顺序。如果第一个人的年龄应该排在第二个人之前,就返回一个小于0的值;如果相等则返回0,如果第一个人应该排在后面则返回一个大于0的值。
然后你可以这样做:
```c
void sort_persons(struct Person people[], int count, int (*cmp)(const void*, const void*)) {
qsort(people, count, sizeof(struct Person), cmp);
}
// 使用上述比较函数对人员数组按年龄排序
int compare_persons(const void* a, const void* b) {
const struct Person *p1 = (const struct Person *)a;
const struct Person *p2 = (const struct Person *)b;
return p1->age - p2->age;
}
int main() {
struct Person people[] = {{"Alice", 25}, {"Bob", 30}, {"Charlie", 20}};
int num_people = sizeof(people) / sizeof(people[0]);
sort_persons(people, num_people, compare_persons);
// 输出排序后的人员信息...
}
```
阅读全文