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

pjr*_*die 6 c

假设我有一组数据点,表示为双精度数组的数组,所以

double **data;
Run Code Online (Sandbox Code Playgroud)

现在,如果我想通过每个数据点中的某个字段对数据进行排序,比如说第二个字段,我会编写一个比较器来做类似的事情:

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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

hou*_*oft 7

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

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