首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用选择排序来根据玩家点对列表进行排序?

问使用选择排序来根据玩家点对列表进行排序?
EN

Stack Overflow用户
提问于 2013-04-10 22:37:17
回答 1查看 298关注 0票数 0

我试图从球员曲棍球统计数据的二进制文件中整理一个列表。我的目标是使用选择排序算法,根据游戏中得分=目标+助攻的点数对列表进行降序排序。

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

这是结构。

代码语言:javascript
复制
struct Player
{
 char name[20];
 int goals;
int assists;
int rating;
};

到目前为止,这就是我的排序数组函数中的内容。

代码语言:javascript
复制
 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. 用公式点= playeri.goals + playeri.assists计算点数
  2. 根据点数对结构数组进行降序排序。
  3. 交换不同的数组,直到列表按降序排序为止。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-10 22:44:59

你必须使用选择排序吗?如果定义了自定义比较函数,则可以使用std::sort:

代码语言:javascript
复制
bool compare_players(Player const& a, Player const& b) {
  return (b.goals + b.assists) < (a.goals + a.assists);
}

然后把你的球员扔进一个名为vector players的游戏里

代码语言:javascript
复制
std::sort(players.begin(), players.end(), &compare_players);

与实现选择排序(O(n^2))相比,这是更少的代码,而且它也更高效(O(n log n))。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15937735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档