手写C语言结构体排序
时间: 2024-09-20 13:12:59 浏览: 55
C语言结构体的“继承”
在C语言中,对结构体进行排序通常涉及到自定义排序函数,因为C标准库本身并不直接提供对结构体元素进行排序的功能。这里我们以冒泡排序为例来说明如何对一个包含结构体数组进行排序:
假设有一个名为`Person`的结构体,用于存储姓名和年龄的数据:
```c
struct Person {
char name[50];
int age;
};
```
如果你想按年龄升序排序这样的`Person`结构体,可以创建一个比较函数`compare_persons`,然后使用`qsort`函数:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义比较函数,按照age字段进行升序排序
int compare_persons(const void *a, const void *b) {
const struct Person *pa = a, *pb = b;
return pa->age - pb->age;
}
void sort_person_array(struct Person people[], int size) {
qsort(people, size, sizeof(struct Person), compare_persons);
}
// 示例
int main() {
struct Person arr[] = {{"Tom", 20}, {"Jerry", 30}, {"Alice", 25}};
int size = sizeof(arr) / sizeof(arr[0]);
sort_person_array(arr, size);
for (int i = 0; i < size; ++i) {
printf("Name: %s, Age: %d\n", arr[i].name, arr[i].age);
}
return 0;
}
```
在这个例子中,`compare_persons`函数作为第三个参数传递给`qsort`,它决定了排序的规则。运行程序后,你会得到按年龄升序排列的人名列表。
阅读全文