在 C 中使用 qsort 对浮点数组进行排序

0 c floating-point comparison qsort

最近我一直在尝试编写一个程序,它要求我对存储字符串和给定字符串的平均 ASCII 值的结构数组进行排序。我一直在尝试使用 stdlib qsort 对它进行排序,但对于编码来说相对较新,我只取得了一些成功,因为当遇到 2 个字符串的相等平均值时,我必须按字母顺序对它们进行排序,否则它们必须从从最高到最低。

我的 qsort 标头中的比较函数如下所示:

int struct_compare(const void *a, const void *b)
{
    const struct *pa;
    const struct *pb;
    pa = a;
    pb = b;
    if ( fabs(pa->average - pb->average) <= 0.000001 )
        return (strcmp(pb->text,pa->text));
    else
        return (pb->average - pa->average);
}
Run Code Online (Sandbox Code Playgroud)

对数组进行排序后,它看起来像这样:

85.166667
85.333333 
86.000000 
83.166667 
80.333333 
79.833333 
76.000000 
72.000000 
69.571429 
64.500000
Run Code Online (Sandbox Code Playgroud)

Tom*_*zes 6

将最后的修改return为:

return pb->average > pa->average ? 1 : -1;
Run Code Online (Sandbox Code Playgroud)

您所遇到的问题是它将浮点值转换为整数值,因此如果差值小于一,它有时会返回零。