按C中的不同索引对数组排序

前端之家收集整理的这篇文章主要介绍了按C中的不同索引对数组排序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有一组数据点,表示为双精度数组的数组,所以
double **data;

现在,如果我想通过每个数据点中的某个字段对数据进行排序,比如说第二个字段,我会编写一个比较器来执行以下操作:

int compare_data_second_field(void *a,void *b) {
    double da = ((double *) a)[1];
    double db = ((double *) b)[1];
    if (da < db) return -1;
    else if (da > db) return 1;
    return 0;
}

然后使用qsort按第二个字段对它们进行排序.

我的问题是,如果我事先不知道哪个字段要排序,我该如何概括呢?就像我可能想要排序第一个字段有时和第五个字段,等等,我也希望它是线程安全所以我不想使用全局变量来跟踪要排序的字段,因为多个这些可能会立刻发生.

在C中我只使用自定义排序类,并在类中有一个实例变量来跟踪要排序的字段.我不知道如何在C中做这样的事情.

解决方法

最好的方法是使用 qsort_r,如果它在您的平台上可用. qsort_r接受传递给比较器的附加参数,因此您可以使用它来传递要对数据进行排序的字段.

如果您的平台上没有这个,那么确实没有一种简单的方法可以做到这一点.您可以使用全局变量解决它,将数据包装在一个包含排序字段信息的结构中,或者滚动您自己的类似qsort_r的函数.

猜你在找的C&C++相关文章