You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何关联排行榜的姓名与分数数组,排序时保持对应关系

解决排行榜姓名与分数关联排序的问题

核心思路

把原本分开存储的姓名和分数绑定成一个整体(比如结构体、类或自定义对象),排序时直接对这个整体进行比较和交换,就能从根源上保证姓名与分数始终对应,不会出现错位。

具体实现步骤

1. 重构数据存储结构

替换独立的字符串数组和整数数组,改用存储"用户-分数"实体的集合:

  • C语言示例(结构体):
typedef struct {
    char name[50];
    int score;
} Player;
Player leaderboard[10]; // 假设排行榜最多容纳10人
  • Java示例(自定义类):
class Player {
    String name;
    int score;
    public Player(String name, int score) {
        this.name = name;
        this.score = score;
    }
}
List<Player> leaderboard = new ArrayList<>();
  • Python示例(自定义类):
class Player:
    def __init__(self, name, score):
        self.name = name
        self.score = score

leaderboard = []

2. 修改冒泡排序逻辑

排序时以Player实体的score字段为依据,交换整个实体对象,确保姓名与分数同步移动。以Python的降序排序为例:

def bubble_sort_leaderboard(leaderboard):
    n = len(leaderboard)
    for i in range(n):
        swapped = False
        for j in range(0, n-i-1):
            # 按分数从高到低排序,升序则改为 <
            if leaderboard[j].score < leaderboard[j+1].score:
                leaderboard[j], leaderboard[j+1] = leaderboard[j+1], leaderboard[j]
                swapped = True
        if not swapped:
            break

3. 更新分数替换逻辑

游戏结束后,判断新分数是否有资格进入排行榜,替换后重新排序(或优化排序逻辑):

new_player_name = "玩家昵称"
new_player_score = 92

# 假设排行榜最多10人
if len(leaderboard) < 10:
    leaderboard.append(Player(new_player_name, new_player_score))
    bubble_sort_leaderboard(leaderboard)
else:
    # 对比当前排行榜最低分(最后一名)
    if new_player_score > leaderboard[-1].score:
        leaderboard[-1] = Player(new_player_name, new_player_score)
        bubble_sort_leaderboard(leaderboard)

优化建议

  • 冒泡排序效率偏低,若排行榜人数较多,可替换为选择排序或插入排序;如果仅替换最后一名,还可以只从最后一名的位置向前冒泡,减少不必要的比较:
def bubble_up_from_last(leaderboard):
    j = len(leaderboard) - 1
    while j > 0 and leaderboard[j].score > leaderboard[j-1].score:
        leaderboard[j], leaderboard[j-1] = leaderboard[j-1], leaderboard[j]
        j -= 1

替换最后一名后调用这个函数,比全量排序效率更高。

内容的提问来源于stack exchange,提问作者newTy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:15:04