c++ - 根据 C++ 中另一个数组的成员对数组进行排序

标签 c++ arrays sorting qsort

我的问题是下一个(是一个简单的例子来说明问题):

我有:

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/

相关文章:

c++ - 我如何将浮点值分配给 char* c[] 数组

php - 如何在 PHP 中显示最近 10 个月的列表?

ios - Swift 数组/集合内存管理

php - MySQL+PHP : How to paginate data from complex query with ORDER BY on user-selected column

c - 如何使用冒泡排序或选择排序对指针数组中的数组进行降序排序?

c++ - 在特定时间运行 C++ 循环

c++ - 如何从STL vector 中最小元素的迭代器位置获取int/size_t值?

c++ - 使用 SWIG 连接 C++ 和 Python

arrays - 从 slice 中删除元素不起作用

algorithm - 为什么算法第四版中快速排序的最坏情况成本与我计算的成本不匹配?