【发布时间】:2016-01-02 02:10:41
【问题描述】:
所以我有两个数组(实际上是指针),我们称它们为 a 和 b。我想首先对a 进行排序,然后保存我为获得该排序数组所做的确切交换并将它们应用于我的向量b。这是我的意思的一个简短示例:
int *a, *b;
//appropriate mallocs
a[0] = 2; a[1] = 3; a[2] = 1;
b[0] = 4; b[1] = 2; b[2] = 3;
//sort a in decreasing order --> a==[3, 2, 1]
//sort b based on sorting of a --> b==[2, 4, 3]
如何在不编写自己的排序函数的情况下实现这一点?
【问题讨论】:
-
为此使用标准函数qsort
-
arrays (pointers actually)....闻起来很麻烦。 -
您真的必须先对一个数组进行排序,然后再对另一个数组应用相同的转换,还是可以同时进行?
-
你必须处理原始数据类型吗?保持数组中最后一个位置的结构怎么样?
-
创建第三个数组 -
a的索引数组 - 最初用0 .. countof(a)填充。在 compare 函数中,使用索引比较a的元素。在qsort完成后,第三个数组将包含元素的新顺序,您可以将其应用于a和b。