c语言结构体qsort排序
时间: 2025-02-21 21:30:54 浏览: 69
### C语言 `qsort` 函数对结构体排序
在C语言中,可以利用标准库函数 `qsort()` 对结构体数组进行排序。此函数接受四个参数:待排序数据的基地址、元素数量、单个元素大小以及用于比较两个元素的指针。
对于结构体类型的排序,关键是编写合适的比较函数。下面是一个具体的例子,展示如何基于学生姓名对学生记录进行升序排列:
#### 定义结构体与初始化
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 声明一个表示学生的结构体
struct Student {
char name[50];
int age;
};
// 创建并初始化若干个Student实例组成的数组
struct Student students[] = {
{"Alice", 23},
{"Bob", 21},
{"Charlie", 22}
};
```
#### 编写比较函数
为了实现按名字字段排序的功能,需要创建一个返回整型值的回调函数作为第三个参数传递给 `qsort()`. 这里采用的是字符串对比的方式[^1]。
```c
// 比较器函数 - 字符串版本 (适用于name成员)
static int compareByName(const void *a, const void *b){
// 将传入的对象转换回原始类型以便访问其内部属性
struct Student *studentA = (struct Student *) a;
struct Student *studentB = (struct Student *) b;
// 使用strcmp执行字母表顺序上的两两比较
return strcmp(studentA->name, studentB->name);
}
```
#### 调用 `qsort` 并验证结果
最后一步就是调用 `qsort`, 同时指定好上述准备好的各项参数[^4].
```c
int main(){
size_t nStudents = sizeof(students)/sizeof(struct Student);
printf("Before sorting:\n");
for(size_t i=0;i<nStudents;++i){
printf("%s ",students[i].name);
}
putchar('\n');
/* 执行快速排序 */
qsort(students,nStudents,sizeof(struct Student),compareByName);
printf("After sorting by Name:\n");
for(size_t i=0;i<nStudents;++i){
printf("%s ",students[i].name);
}
putchar('\n');
return EXIT_SUCCESS;
}
```
这段程序展示了完整的流程——从定义到最终输出已排序的结果列表。通过这种方式,可以根据任意选定的标准轻松扩展其他形式的数据处理逻辑[^2]。
阅读全文
相关推荐


















