c - 根据均值的接近度对数组进行排序

标签 c arrays sorting mean qsort

我有一个 double 数组。我计算数组的平均值。

我现在需要根据每个值与平均值的接近程度对数组进行排序。

如果我可以将一个特殊的比较器函数传递给 qsort 并将平均值作为第三个参数,那么它将解决我的问题:

int compareValues(double a, double b, double mean)
{
    double aValue = fabs(mean - a);
    double bValue = fabs(mean - b);
    if (aValue > bValue)
       return 1;
    else if (aValue < bValue)
       return -1;
    else return 0;
}

但是,从我读到的所有内容来看,您不能将这样的比较器传递给 qsort。

有没有一种我没有看到的简单方法可以做到这一点?

最佳答案

构建您自己的专用快速排序函数:

int comp(double a, double b, double mean)
{
    a = fabs(mean - a);
    b = fabs(mean - b);
    if (a > b)
       return 1;
    else if (a < b)
       return -1;
    else return 0;
}

void swap(double *v, int a, int b)
{
    double temp;

    temp = v[a];
    v[a] = v[b];
    v[b] = temp;
}

void sort(double *v, int left, int right, double mean, int (*comp)(double, double, double))
{
    int i, last;

    if (left >= right) return;
    swap(v, left, (left + right) / 2);
    last = left;
    for (i = left + 1; i <= right; i++) {
        if (comp(v[i], v[left], mean) < 0)
            swap(v, ++last, i);
    }
    swap(v, left, last);
    sort(v, left, last - 1, mean, comp);
    sort(v, last + 1, right, mean, comp);
}

关于c - 根据均值的接近度对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22274067/

相关文章:

c++ - 使用自定义比较功能对静态多维数组进行排序

c - 体系结构 x86_64 的 undefined symbol 在 C 中意味着什么?

c - 如何以表格格式将字符串列表打印到文件中?

arrays - 如果只允许单位移位,则计算对数组进行排序的移动次数

python - Numpy 如何推断数组的 dtype

cocoa - 对 NSFileManager 结果进行排序

python - 如何使用 pandas groupby 对某些行进行降序排序,对某些行进行升序排序

c - Malloc、可变长度数组还是静态数组?

c - 为什么默认的 SIGPIPE 处理程序被更改?

php - 使用 PDO 从两个表中获取 JSON