qsort是什么
时间: 2025-05-03 19:38:00 浏览: 20
### C语言 `qsort` 函数的定义与用法
#### 1. 定义
`qsort` 是标准库中的一个函数,用于实现快速排序算法。它能够对任意类型的数组进行排序,并支持自定义比较逻辑[^3]。
该函数的原型如下:
```c
void qsort(void *base, size_t num, size_t size, int (*compar)(const void *, const void *));
```
参数解释:
- `base`: 数组起始地址。
- `num`: 要排序的数据项数量。
- `size`: 单个数据项的大小(以字节为单位)。
- `compar`: 比较函数指针,用于指定两个元素之间的比较方式。
---
#### 2. 整型数组排序示例
下面是一个简单的例子,展示如何使用 `qsort` 对整型数组进行升序排序:
```c
#include <stdio.h>
#include <stdlib.h>
// 自定义比较函数
int compare_int(const void *a, const void *b) {
return (*(int *)a - *(int *)b); // 升序排列
}
int main() {
int array[] = {5, 3, 8, 6, 2};
size_t n = sizeof(array) / sizeof(array[0]);
printf("Before sorting:\n");
for (size_t i = 0; i < n; ++i) {
printf("%d ", array[i]);
}
printf("\n");
// 使用 qsort 排序
qsort(array, n, sizeof(int), compare_int);
printf("After sorting:\n");
for (size_t i = 0; i < n; ++i) {
printf("%d ", array[i]);
}
printf("\n");
return 0;
}
```
上述代码通过传递一个比较函数来控制排序顺序[^4]。
---
#### 3. 字符串数组排序示例
对于字符串数组,可以通过修改比较函数的方式对其进行排序:
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 自定义比较函数
int compare_string(const void *a, const void *b) {
return strcmp(*(char **)a, *(char **)b);
}
int main() {
char *array[] = {"banana", "apple", "orange", "grape"};
size_t n = sizeof(array) / sizeof(array[0]);
printf("Before sorting:\n");
for (size_t i = 0; i < n; ++i) {
printf("%s\n", array[i]);
}
// 使用 qsort 排序
qsort(array, n, sizeof(char *), compare_string);
printf("After sorting:\n");
for (size_t i = 0; i < n; ++i) {
printf("%s\n", array[i]);
}
return 0;
}
```
此示例展示了如何利用 `strcmp` 来处理字符串间的比较操作[^2]。
---
#### 4. 结构体数组排序示例
当需要对结构体数组进行排序时,同样可以借助 `qsort` 和自定义比较函数完成任务。以下是按年龄字段降序排列的一个实例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Person {
char name[50];
int age;
} Person;
// 自定义比较函数
int compare_person_age_desc(const void *a, const void *b) {
return ((Person *)b)->age - ((Person *)a)->age; // 年龄降序
}
int main() {
Person people[] = {
{"Alice", 25},
{"Bob", 30},
{"Charlie", 20}
};
size_t n = sizeof(people) / sizeof(Person);
printf("Before sorting:\n");
for (size_t i = 0; i < n; ++i) {
printf("%s %d\n", people[i].name, people[i].age);
}
// 使用 qsort 排序
qsort(people, n, sizeof(Person), compare_person_age_desc);
printf("After sorting by age descending:\n");
for (size_t i = 0; i < n; ++i) {
printf("%s %d\n", people[i].name, people[i].age);
}
return 0;
}
```
这段代码实现了基于结构体内特定成员变量的排序功能[^1]。
---
阅读全文
相关推荐


















