2013-04-10 76 views
0

我在尝试从玩家曲棍球统计数据的二进制文件中排序列表。我的目标是使用选择排序算法来根据游戏中points = goals + assists的点数降序对列表进行排序。使用选择排序根据玩家点数对列表进行排序?

我正在使用一个结构数组,其中每个数组都是玩家统计数据的结构。

这是结构。

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++; 
} 

之后,我被卡住了。

下面是该功能假定在广义上执行的步骤。通过使用公式点=播放器[I] .goals +玩家

  1. 计算数量的点[I] .assists

  2. 排序结构的基于点的数目的降序排列。

  3. 交换不同的数组,直到列表根据最大数量的点降序排列到最少。

+1

看看这个网页http://en.wikipedia.org/wiki/Selection_sort。它有一些简单的,很好的评论,用于进行选择排序的C++代码。适应你的问题。 – john 2013-04-10 22:41:12

回答

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); 

这是更少的代码,它的效率也更高(Ø (n log n))比实施选择排序(O(n^2))。

+0

不幸的是,我必须或否认,这是练习的重点。 – Scholar 2013-04-10 22:48:59

相关问题