gpt4 book ai didi

c - 按C中的不同索引对数组数组进行排序

转载 作者:太空狗 更新时间:2023-10-29 17:19:20 27 4
gpt4 key购买 nike

假设我有一组数据点,表示为 double 组,所以

double **data;

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

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 按第二个nd 字段对它们进行排序。

我的问题是,如果我事先不知道要按哪个字段进行排序,我该如何概括这一点?就像我有时想按第 1st 字段排序,有时按第 5th 字段排序,等等。我也希望它是线程安全的,所以我不想使用全局变量来跟踪要排序的字段,因为其中多个可能会同时发生。

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

最佳答案

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

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

关于c - 按C中的不同索引对数组数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11284624/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com