在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
观看现场演示