c中改进的qsort()函数

use*_*830 1 c sorting

假设我们正在使用qsort()对一维数组进行排序,是否有一种简单的方法可以从排序数组的元素中检索索引,这是元素在排序之前在数组中编入索引时所具有的.假设c [N]变为d [N],如何从整数i,j中找到c [j] = d [i]?当我的意思是一种简单的方法时,qsort(带有一些额外的参数)是否存储了这种信息(在排序之前的索引之间进行双射)或者它是否存在可以轻松排序和检索此类信息的qsort改进函数?

Sir*_*ius 5

假设您使用如下结构填充初始数组:

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)

然后,您将使用初始索引对数组进行排序.

免责声明:我写得很快,可能会有错误.