qsort怎么使用
时间: 2025-05-12 19:28:45 浏览: 27
### C语言中 `qsort` 函数的用法
#### 头文件引入
为了使用 `qsort()` 函数,需要先包含标准库头文件 `<stdlib.h>`[^3]。
#### 基本语法
以下是 `qsort()` 的基本定义:
```c
void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
```
- **`base`**: 指向待排序数组的第一个元素的指针。
- **`nmemb`**: 数组中元素的数量。
- **`size`**: 单个元素所占字节数(通常通过 `sizeof` 计算得出)。
- **`compar`**: 用于比较两个元素大小的回调函数。该函数接收两个指向被比较元素的常量指针作为参数,并返回一个整数值来表示它们之间的关系。
#### 参数说明
1. **`base`** 是指向数据区第一个元素地址的一个通用型指针变量 (即 `void*`),因此它可以接受任何类型的数据区域首址[^4]。
2. **`nmemb`** 表示参与排序的对象数目,它是一个无符号整数 (`size_t`) 类型,在实际应用时应确保此值正确反映了目标集合内的成员总数。
3. **`size`** 定义单个对象占用存储空间大小,一般利用编译器内置运算符 `sizeof` 来获取特定数据类型的尺寸。
4. **`compar`** 提供了一种机制让用户自定义两项目间相对顺序的标准;这是一个函数指针,指向实现具体逻辑判断过程的方法体[^2]。
#### 示例代码展示
下面给出几个具体的例子帮助理解:
##### 整形数组升序排列
```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[] = {97, 65, 43, 87};
int n = sizeof(array)/sizeof(array[0]);
qsort(array, n, sizeof(int), compare_int);
for(int i=0;i<n;i++) {
printf("%d ",array[i]);
}
return 0;
}
```
上述程序会输出已排序好的序列 `[43, 65, 87, 97]`.
##### 字符串降序排列
当处理的是字符串而非单一字符的时候,则需特别注意传入给对比功能模块的实际单元应当是指向各别词句起始位置处的指标形式而不是单纯的字母个体本身:
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 比较函数:按从大到小排序
int compare_string_desc(const void* a, const void* b){
return strcmp(*(char**)b , *(char**)a );
}
int main(){
char* fruits[]={"apple","banana","cherry"};
int n = sizeof(fruits)/sizeof(fruits[0]);
qsort((void*)fruits,n,sizeof(char*),compare_string_desc );
for(int i=0;i<n;i++) {
puts(fruits[i]);
}
return 0;
}
```
这段脚本最终打印结果将是按照字母表逆序显示水果名称列表 ["cherry", "banana", "apple"].
#### 注意事项
需要注意的是,在编写比较函数时一定要考虑清楚到底是要拿什么来进行相互对照评估工作才行哦!另外就是关于那个强制转型还有取地址操作方面也得格外小心谨慎些呢😊.
阅读全文
相关推荐


















