加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:44:14 所属栏目:百科 来源:网络整理
导读:假设我有一组数据点,表示为双精度数组的数组,所以 double **data; 现在,如果我想通过每个数据点中的某个字段对数据进行排序,比如说第二个字段,我会编写一个比较器来执行以下操作: int compare_data_second_field(void *a,void *b) { double da = ((double *
假设我有一组数据点,表示为双精度数组的数组,所以
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的函数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读