#c
#c
Вопрос:
Я пытаюсь отсортировать множество массивов параллельно. Я сортирую один массив с помощью qsort и возвращаю массив int, который определяет индексы их исходных позиций. Теперь с этим массивом int мне нужно отсортировать другие массивы.
Массив 1:
zzz
yyy
def
abc
cde
xxx
после сортировки я получаю массив индексов и отсортированный массив: массив позиций Idx
3 : abc
4 : cde
2 : def
5 : xxx
1 : yyy
0 : zzz
Теперь, основываясь на этом массиве индексов, мне нужно отсортировать другой массив
a
b
c
d
e
f
так что это становится
d
e
c
f
b
a
Большое спасибо
Комментарии:
1. Покажите нам код, который вы написали на данный момент.
2. Расскажите нам, когда вы делаете домашнее задание, и расскажите, что вы пробовали. Ответ на ваш вопрос очень прост, и вы не добьетесь никакого прогресса, если вам его передадут.
Ответ №1:
for (i=0; i < 6; i)
SortedArray[IndexArray[i]] = AnotherArray[i];
Ответ №2:
В этом коде показаны два способа сделать это:
Первый способ делает это с использованием qsort() .. на чистом C, но потребляет немного больше памяти
struct pair {
int distance;
int index;
};
int my_pair_compare(const void *const first, const void *const second)
{
const pair* a = (const pair*)first;
const pair* b = (const pair*)second;
if (a->distance > b->distance)
return 1;
else if (a->distance < b->distance)
return -1;
else
return 0;
}
void calculate_new_order1(int week_count, float distances[], int new_order[])
{
struct pair ab[week_count];
for (int i = 0; i<week_count; i) {
ab[i].distance = distances[i];
ab[i].index = i;
}
qsort(ab, week_count, sizeof(*ab), my_pair_compare);
for (int i=0; i<week_count; i){
new_order[i] = ab[i].index;
}
}
The seconds сохраняет расстояния (в моем примере) на карте, а затем выполняет итерацию по карте. Способ C .
void calculate_new_order2(int week_count, float distances[], int new_order[])
{
std::map<float,int> ooo;
for (int week=0; week<week_count; week ) {
ooo[distances[week]] = week;
}
int t = 0;
for (auto i=ooo.begin(); i!=ooo.end(); i ) {
new_order[t] = i->second;
t ;
}
}
Проблема со вторым решением заключается в том, что если у вас есть две «недели» с одинаковым расстоянием, это приведет к сбою, поскольку значения сохраняются в одном и том же индексе карты.