下列函数实现排行榜中单个元素的位置调整(类似插入排序的相邻搬移)。当某玩家分数增加,需将其向 前移动时, while 循环的条件应为( )。 struct Player{ int score; }; void up(Player players[], int n, int idx){ Player cur = players[idx]; int i = idx; while( ____________________ ){ players[i] = players[i-1]; i--; } players[i] = cur;
A:i > 0 && cur.score > players[i-1].score
B:i > 0 && cur.score players[i+1].score
D:i < n-1 && cur.score < players[i+1].score
正确答案:A
答案解析
函数目标是将指定索引处的玩家向前移动,直到其分数不再大于前方玩家。当前元素从原位置取出后,需逐个与前一个元素比较。循环应持续当当前位置索引大于0且当前玩家分数大于前一位置玩家分数时。每轮将前一位置的玩家向后移一位,空出位置供当前玩家插入。索引i初始为指定位置,每次循环前移一位,因此循环条件必须同时保证i不越界且满足分数比较条件。比较对象是当前待插入玩家与已处理部分的相邻前驱元素。
试卷来源:202603 CCF-GESP编程能力等级认证C++四级真题