假设我们正在使用qsort()对一维数组进行排序,是否有一种简单的方法可以从排序数组的元素中检索索引,这是元素在排序之前在数组中编入索引时所具有的.假设c [N]变为d [N],如何从整数i,j中找到c [j] = d [i]?当我的意思是一种简单的方法时,qsort(带有一些额外的参数)是否存储了这种信息(在排序之前的索引之间进行双射)或者它是否存在可以轻松排序和检索此类信息的qsort改进函数?
假设您使用如下结构填充初始数组:
struct IndexedInteger {
int value;
int index;
}
Run Code Online (Sandbox Code Playgroud)
然后,您需要在循环中填充索引:
void addIndices(IndexedInteger * array, size_t num) {
int i;
for (i = 0; i < num; ++i) {
array[i].index = i;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你将对你的数组进行排序:
int compareIndexed(const void * elem1, const void * elem2) {
IndexedInteger * i1, *i2;
i1 = (IndexedInteger*)elem1;
i2 = (IndexedInteger*)elem2;
return i1->value - i2->value;
}
void sortArray(IndexedInteger * array, size_t num) {
qsort(array, num, sizeof(IndexedInteger), compareIndexed);
}
Run Code Online (Sandbox Code Playgroud)
然后,您将使用初始索引对数组进行排序.
免责声明:我写得很快,可能会有错误.