【问题标题】:Using selection sort to sort a list based on player points?使用选择排序根据玩家积分对列表进行排序?
【发布时间】:2013-04-02 23:54:16
【问题描述】:

我正在尝试从球员曲棍球统计数据的二进制文件中对列表进行排序。我的目标是使用选择排序算法根据游戏中的点数按降序对列表进行排序,其中点数 = 进球 + 助攻。

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

这是结构。

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. 交换不同的数组,直到列表按从最大到最少的点数降序排序。

【问题讨论】:

标签: c++ c algorithm sorting selection-sort


【解决方案1】:

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

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

然后将你的玩家扔到一个名为playersvector 中,然后

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

这比实现选择排序 (O(n^2)) 的代码更少,而且效率更高 (O(n log n))。 p>

【讨论】:

  • 不幸的是,我必须这样做,否则我会这样做,这就是练习的重点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
  • 2017-06-13
  • 2021-06-13
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多