You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言qsort比较函数编写求助:升序降序排序结果不符合预期

qsort比较函数编写及问题排查

核心错误点

  • 第一个错误:Acal是double类型数组,调用qsort时第三个参数错误传入了sizeof(float),需改为sizeof(double)。qsort依赖该参数定位每个数组元素的内存位置,元素大小传错会导致内存读取完全错乱,排序逻辑自然不符合预期。
  • 第二个错误:头文件里的比较函数声明不匹配,你实现的第二个比较函数名为cmpfunc2,但头文件里声明的是int cmpfun2();,少了一个字符c;同时C语言中未写明参数列表的函数声明属于旧式声明,建议补全参数列表避免参数匹配错误。
  • 隐含问题:你的代码中未包含qsort对应的头文件<stdlib.h>,会触发函数隐式声明问题,也可能导致运行异常。

修正后的代码

比较函数(你写的比较逻辑本身符合要求,无需调整)

// double数组降序排序
int cmpfunc(const void *a, const void *b) {                                                                                             
    if (*(double*) a < *(double*) b)
        return 1;
    else if (*(double*) a > *(double*) b)
        return -1;
    else
        return 0;
}

// float数组升序排序
int cmpfunc2(const void *a, const void *b) {
    if (*(float*) a < *(float*) b)
        return -1;
    else if (*(float*) a > *(float*) b)
        return 1;
    else
        return 0;
}

qsort调用部分

#include "stdio.h"
#include "stdlib.h" // 新增qsort对应的头文件
int main(){
    // 元素大小改为sizeof(double)
    qsort(Acal, 4, sizeof(double), cmpfunc);
    qsort(Value, 4, sizeof(float), cmpfunc2);
}

头文件声明部分

typedef struct{
    float Value[5] ;
    double Acal[5];
} value;

// 修正函数名、补全参数列表
int cmpfunc(const void *a, const void *b);
int cmpfunc2(const void *a, const void *b);

内容的提问来源于stack exchange,提问作者Marc Hammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:15:03