我希望按照第一个数组的顺序对第二个数组进行排序。例如:
first = {1,8,7,2,4}
second = {9,7,2,10,3}
我希望第一个值保持不变,而第二个值按照与第一个相同的相对顺序进行排序。也就是说,最小值位于索引0,第二小的值位于索引3,第三小的值位于索引4等等。
second = {2,10,9,3,7}
我已经尝试了一些下列问题的代码
#include <stdio.h>
typedef struct
{
int num;
int pos;
}ArrType;
ArrType arrA[5] = {{1,0},{8,1},{7,2},{2,3},{4,4}};
ArrType arrB[5] = {{9,0},{7,1},{2,2},{10,3},{3,4}};;
int cmparr(const void *a, const void *b)
{
ArrType *tmpa, *tmpb;
tmpa = (ArrType*) a;
tmpb = (ArrType*) b;
return(arrA[tmpa->pos].num - arrA[tmpb->pos].num);
}
int main(void)
{
int i;
qsort(arrB,5, sizeof(ArrType), cmparr);
for (i=0; i<5; i++)
{
printf ("%d ",arrB[i].num);
}
return (0);
}
实际输出结果为
9 10 3 2 7
我愿意尝试不同的数据结构,但是arrB
只能进行一次排序。
我看过一些C++、Javascript和其他语言的解决方案。但是在C语言中没有解决方法。
编辑 - 在最终程序中,这些数组将非常大。我正在寻找单个排序操作,即单个调用qsort
。
cmparr
函数或使用的数据结构中有问题。 - Ranonsecond = {2,10,9,3,7}
。 - Ranon