在 C 中使用 qsort 对浮点数组进行排序
Sorting an array of floats with qsort in C
最近我一直在尝试编写一个程序,该程序要求我对存储字符串和给定字符串的平均 ASCII 值的结构数组进行排序。我一直在尝试使用 stdlib qsort 对它进行排序,但我对编码相对较新,我只取得了一些成功,因为当遇到 2 个字符串的平均平均值时,我必须按字母顺序对它们进行排序,否则它们必须从从最高到最低。
我的 qsort header 中的比较函数类似于:
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);
}
数组排序后如下所示:
85.166667
85.333333
86.000000
83.166667
80.333333
79.833333
76.000000
72.000000
69.571429
64.500000
将最后的 return
更改为:
return pb->average > pa->average ? 1 : -1;
您所拥有的问题在于它将浮点值转换为整数值,因此如果差异小于一,它有时会返回零。
最近我一直在尝试编写一个程序,该程序要求我对存储字符串和给定字符串的平均 ASCII 值的结构数组进行排序。我一直在尝试使用 stdlib qsort 对它进行排序,但我对编码相对较新,我只取得了一些成功,因为当遇到 2 个字符串的平均平均值时,我必须按字母顺序对它们进行排序,否则它们必须从从最高到最低。
我的 qsort header 中的比较函数类似于:
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);
}
数组排序后如下所示:
85.166667
85.333333
86.000000
83.166667
80.333333
79.833333
76.000000
72.000000
69.571429
64.500000
将最后的 return
更改为:
return pb->average > pa->average ? 1 : -1;
您所拥有的问题在于它将浮点值转换为整数值,因此如果差异小于一,它有时会返回零。