Использование сортировки выбора для сортировки списка на основе очков игрока?

Я пытаюсь отсортировать список из бинарного файла статистики игроков хоккея. Моя цель — использовать алгоритм сортировки выбора для сортировки списка в порядке убывания на основе количества очков в игре, где очки = голы + голевые передачи.

Я использую массив структур, где каждый массив представляет собой структуру статистики игроков.

Вот структура.

struct Player
{
char name[20];
int goals;
int assists;
int rating;
};

Это то, что у меня есть в моей функции массива сортировки.

 void sortArrays( Player players[], int numPlayers)
int top=0;
int ssf;
int last=numPlayers;
int ptr;
int i = 0;
Player temp;

while (top < last)
{
ptr=top;
ssf=top;

pnts = players[i].goals + players[i].assists;
i++;
}

После этого я застрял.

Вот шаги, которые функция должна выполнять в общих чертах.

  1. Подсчитайте количество очков, используя формулу points = player [i] .goals + player [i] .assists

  2. Сортировать массив структур в порядке убывания на основе количества точек.

  3. Поменяйте местами разные массивы, пока список не будет отсортирован в порядке убывания, основываясь на наибольшем количестве баллов к наименьшему.

0

Решение

Вы должны использовать сортировку выбора? Вы могли бы использовать std::sort вместо этого, если вы определяете пользовательскую функцию сравнения:

bool compare_players(Player const& a, Player const& b) {
return (b.goals + b.assists) < (a.goals + a.assists);
}

Затем бросьте своих игроков в vector называется players и просто

std::sort(players.begin(), players.end(), &compare_players);

Это меньше кода, и это также более эффективно (O (n log n)), чем реализация сортировки выбора (O (N ^ 2)).

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]