我的问题是下一个(是一个简单的例子来说明问题):
我有:
int* array1;
double* array2.
array1=new int[10];
array2=new double[10];
array1=filledWithIntegers(random);
array2=filledWithDoubles(random);
//这里我想根据array2的值对array1进行排序。我正在尝试使用 stdlib 的 qsort 函数。 qsort(array1,6, sizeof(int), 比较);
重点是如何根据array2做order array1的compare函数。
不能使用std库数据结构,必须直接在数组指针中完成。
谢谢。
最佳答案
不是对 array1
的整数进行排序,而是使用 array2[index]
对它们的索引进行排序以比较项目,然后将 array1
重新排列在根据您从排序中得到的排列。
这是一个quick demo :
#include <stdio.h>
#include <stdlib.h>
int array1[] = {1, 7, 3, 9, 5};
double array2[] = {1.1, 7.7, 3.3, 9.9, 5.5};
int compare (const void * a, const void * b) {
double diff = array2[*(int*)a] - array2[*(int*)b];
return (0 < diff) - (diff < 0);
}
int main(void) {
int perm[5], i;
int res[5];
for (i = 0 ; i != 5 ; i++) {
perm[i] = i;
}
qsort (perm, 5, sizeof(int), compare);
for (i = 0 ; i != 5 ; i++) {
res[i] = array1[perm[i]];
}
for (i = 0 ; i != 5 ; i++) {
printf("%d\n", res[i]);
}
return 0;
}
关于c++ - 根据 C++ 中另一个数组的成员对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10584894/