int cmp(const void *a,const void *b){ return *(int*)a-*(int*)b;}
时间: 2025-04-28 13:20:46 浏览: 21
### C语言 `qsort` 函数中的比较函数实现
在C语言中,`qsort()` 是标准库提供的用于排序的函数。为了使 `qsort()` 能够正常工作,需要提供一个自定义的比较函数来决定如何排列元素。
#### 自定义比较函数的作用
比较函数决定了两个元素之间的相对顺序。该函数接收两个指向待比较元素的指针作为参数,并返回整数值以指示这两个元素的关系:
- 如果第一个元素小于第二个,则返回负数;
- 如果两者相等,则返回零;
- 如果第一个大于第二个,则返回正数[^3]。
#### 比较函数的具体实例
下面是一个针对整形数组使用的简单比较函数的例子:
```c
int compare_ints(const void* a, const void* b) {
int arg1 = *(const int*)a;
int arg2 = *(const int*)b;
if (arg1 < arg2) return -1;
if (arg1 > arg2) return 1;
return 0;
}
```
此代码片段展示了如何创建适用于整型数据类型的比较逻辑。通过强制转换传入的泛型指针 (`void *`) 到具体的类型指针 (`int *`) 来访问实际的数据值并执行相应的比较操作。
当处理其他基本数据类型或者结构体成员时,只需调整上述模板内的具体细节即可适应不同的需求。
对于字符串或其他复杂对象来说,可能还需要更复杂的逻辑来进行逐字符或者其他属性上的对比。
#### 使用示例
假设有一个包含多个整数的数组想要按照升序排列,那么可以在调用 `qsort()` 的时候传递上面定义好的比较器给它:
```c
#include <stdio.h>
#include <stdlib.h>
// ... 上面定义过的compare_ints...
int main() {
int numbers[] = {49, 7, 81, 64};
size_t count = sizeof(numbers)/sizeof(*numbers);
qsort(numbers, count, sizeof(int), compare_ints);
for(size_t i=0 ;i<count;i++){
printf("%d ",numbers[i]);
}
putchar('\n');
return EXIT_SUCCESS;
}
```
这段程序会输出已排序后的序列:`7 49 64 81`[^4]。
阅读全文
相关推荐


















