C语言中如何不用sort按照结构体变量大小进行排序
时间: 2024-10-14 17:08:37 浏览: 27
数据结构(C语言版)实验报告 (内部排序算法比较).pdf
在C语言中,如果你想要对结构体变量按照某个成员进行排序,但又不想使用标准库函数`qsort`或`sort`,可以创建自定义的比较函数,并利用`qsort`进行排序。这个比较函数通常接受两个结构体指针作为参数,然后根据你要排序的那个成员的值返回一个负数、零或正数,表示前者的顺序。
例如,假设有一个`Person`结构体,包含`age`字段:
```c
struct Person {
int age;
char name[50];
};
void compare(const void *a, const void *b) {
const struct Person *p1 = (const struct Person *) a;
const struct Person *p2 = (const struct Person *) b;
if (p1->age < p2->age)
return -1;
else if (p1->age > p2->age)
return 1;
else // 如果年龄相同,则按名字字母顺序
return strcmp(p1->name, p2->name);
}
int main() {
struct Person people[] = { {20, "Alice"}, {30, "Bob"}, {25, "Charlie"} };
int num_people = sizeof(people) / sizeof(people[0]);
qsort(people, num_people, sizeof(struct Person), compare);
// 现在people数组已按照age升序排列
for (int i = 0; i < num_people; i++) {
printf("Age: %d, Name: %s\n", people[i].age, people[i].name);
}
return 0;
}
```
在这个例子中,`compare`函数实现了按照`age`字段排序的逻辑。如果需要降序,只需交换 `<` 和 `>` 的位置即可。
阅读全文