在C中排序后跟踪数组的原始索引

我有一个数组让我们说A[5] ,5个元素是5,4,1,2,3 。 现在我按升序对这些数组进行排序。 所以结果数组现在是1,2,3,4,5 。 我使用stdlib.h qsort()函数stdlib.h进行排序。 问题是我如何获得原始数组相对于我的新数组的索引。 最初我的指数是0,1,2,3,4 ,相应的值为5,4,1,2,3 ,现在指数已经变为2,3,4,1,0。 如何在C中有效地获得这些指数? 提前谢谢(如果可能,请写下代码)

在有限的条件下还有如下方法。

 #include  int main(void){ int data[] ={ 5,4,1,2,3 }; //Without duplication, The number of limited range. int size = sizeof(data)/sizeof(*data); int keys[size]; int i; printf("data :\n"); for(i=0;i 

如何对@Kerrek的索引数组进行排序。

 #include  #include  int *array; int cmp(const void *a, const void *b){ int ia = *(int *)a; int ib = *(int *)b; return array[ia] < array[ib] ? -1 : array[ia] > array[ib]; } int main(void){ int data[] ={ 5,4,1,2,3 }; int size = sizeof(data)/sizeof(*data); int index[size];//use malloc to large size array int i; for(i=0;i 

拍摄二维arrays。 存储数字是第一列,然后在第二列中压缩索引。 您可以将比较器函数编写为:

 int compare ( const void *pa, const void *pb ) { const int *a = pa; const int *b = pb; if(a[0] == b[0]) return a[1] - b[1]; else return a[0] - b[0]; } 

呼叫qsort应该是:

 qsort(array, n, sizeof array[0], compare); // n is representing rows 

观看现场演示