我正在尝试从玩家曲棍球统计数据的二进制文件中对列表进行排序。我的目标是使用选择排序算法,根据游戏中积分=目标+助攻的点数,按降序对列表进行排序。
我正在使用一个结构数组,其中每个数组都是玩家统计数据的结构。
这是结构。
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++;
}
在此之后我被卡住了。
以下是该功能假设在广义上执行的步骤。
使用公式计算点数= player [i] .goals + player [i] .assists
根据点数按降序对结构数组进行排序。
交换不同的数组,直到列表按照最大点数的降序排序。
答案 0 :(得分: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 ^ 2))更有效( O(n log n))。