首页 文章

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

提问于
浏览
0

我试图从球员曲棍球统计的二进制文件中排序列表 . 我的目标是使用选择排序算法根据点数=目标助攻的游戏中的点数以降序对列表进行排序 .

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

这是结构 .

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

在此之后我被困住了 .

以下是该功能假设要广泛执行的步骤 .

  • 使用公式points = player [i] .goals player [i] .assists计算点数

  • 根据点数按降序对结构数组进行排序 .

  • 交换不同的数组,直到列表按照最大点数的降序排序 .

1 回答

  • 0

    你必须使用选择排序吗?如果定义自定义比较函数,则可以使用 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)) .

相关问题