Я пытаюсь сделать параллельный qsort в C ++. У меня числовой массив, который хорошо сортируется, и я хочу, чтобы параллельный двумерный массив символов двигался вверх или вниз с его номерами. Это то, что я до сих пор.
int compare (const void * a, const void * b)
{
//this is for qsort
return ( *(int*)b - *(int*)a );
}
void sort_scores(char** myArray, int *votes)
{
qsort ((myArray, votes ), 5, sizeof(int), compare);
}
Я получаю сортировку по числам, но не могу переместить символы по одному за раз, я не могу заставить это работать. Буду признателен за любую оказанную помощь.
Вместо того, чтобы сортировать сами голоса, вы можете создать массив указателей на голоса (то есть массив указателей на каждый элемент votes
массив) и сортировать указатели. (Не забудьте обновить функцию сравнения соответствующим образом! Теперь она будет получать аргументы, которые вы должны привести к int **
).
После сортировки этого нового массива просто пройдитесь по нему и используйте разность указателей, чтобы получить индексы элементов в исходных массивах.
Других решений пока нет …