基于C++中另一个数组的成员对数组进行排序

Pau*_*Pau 5 c++ arrays sorting qsort

我的问题是下一个(这是一个显示问题的简单示例):

我有:

int* array1;
double* array2. 

array1=new int[10];
array2=new double[10];
array1=filledWithIntegers(random);
array2=filledWithDoubles(random);
Run Code Online (Sandbox Code Playgroud)

//这里我想基于array2值对array1进行排序.我正在尝试使用stdlib的qsort函数.qsort(array1,6,sizeof(int),compare);

关键是如何基于array2为order1生成比较函数.

不可能使用std库数据结构,它必须直接在数组指针中完成.

谢谢.

das*_*ght 5

不是对整数进行array1排序,而是使用array2[index]比较项来对其索引进行排序,然后array1根据从排序中返回的排列进行重新排列.

这是一个快速演示:

#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;
}
Run Code Online (Sandbox Code Playgroud)