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

按C中的不同索引对数组排序,第1张

概述假设我有一组数据点,表示为双精度数组的数组,所以 double **data; 现在,如果我想通过每个数据点中的某个字段对数据进行排序,比如说第二个字段,我会编写一个比较器来执行以下 *** 作: int compare_data_second_field(void *a, void *b) { double da = ((double *) a)[1]; double db = ((do 假设我有一组数据点,表示为双精度数组的数组,所以
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中的不同索引对数组排序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1258144.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存