Я хочу отсортировать второй массив в соответствии с первым массивом.например,
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 ++, Javascipt и других языках.Но в C. не существует решения.
Edit - эти массивы в конечной программе будут довольно большими.Я ищу одну операцию сортировки.т.е. один звонок на qsort