#AG203. 【程序填空题】2.3选择排序程序填空

【程序填空题】2.3选择排序程序填空

题目1:游戏排行榜排序

某游戏需对玩家分数进行降序排列,以下是选择排序的初始化代码,请补全最大值索引的初始化语句。{{ input(1) }}

def selection_sort(arr):
    n = len(arr)
    for i in range(n-1):
        ______ = i  # 初始化当前最大值索引(如:从第i个位置开始)
        for j in range(i+1, n):
            if arr[j] > arr[max_idx]:
                max_idx = j
        arr[i], arr[max_idx] = arr[max_idx], arr[i]
    return arr

题目2:音乐播放器列表调整

用户需要交换播放列表中第i首和第j首歌曲的位置。补全交换操作的代码。{{ input(2) }}

def swap_elements(arr, i, j):
    ______  # 交换数组中i和j位置的歌曲(如:将《A》和《B》调换顺序)
    return arr

题目3:学生成绩降序排列

教师需按成绩从高到低排序学生名单。补全选择排序的比较条件。{{ input(3) }}

def selection_sort_desc(arr):
    n = len(arr)
    for i in range(n-1):
        max_idx = i
        for j in range(i+1, n):
            if ______:  # 比较条件(如:当前成绩是否高于已知最高分)
                max_idx = j
        arr[i], arr[max_idx] = arr[max_idx], arr[i]
    return arr

题目4:机器人舞蹈动作优化

机器人需对舞蹈动作进行排序,优化后的选择排序同时处理首尾元素。补全外层循环终止条件。{{ input(4) }}

def optimized_selection_sort(arr):
    n = len(arr)
    for i in range(______):  # 只需遍历一半次数(如:减少机器人计算时间)
        # 初始化当前未排序部分的边界
        left = i
        right = n - i - 1        
        # 初始化最小值和最大值的索引
        min_idx = left
        max_idx = right        
        # 遍历未排序部分,寻找最小和最大值
        for j in range(left, right + 1):
            if arr[j] < arr[min_idx]:
                min_idx = j
            if arr[j] > arr[max_idx]:
                max_idx = j        
        # 将最小值交换到左侧
        arr[left], arr[min_idx] = arr[min_idx], arr[left]        
        # 如果最大值原本在left位置,交换后它被移动到min_idx位置
        if max_idx == left:
            max_idx = min_idx        
        # 将最大值交换到右侧
        arr[right], arr[max_idx] = arr[max_idx], arr[right]
    
    return arr

# 示例测试
arr = [5, 3, 8, 1, 2]
print("排序前:", arr)  # 输出: [5, 3, 8, 1, 2]
optimized_selection_sort(arr)
print("排序后:", arr)  # 输出: [1, 2, 3, 5, 8]

题目5:物流包裹追踪系统

物流系统使用链表记录包裹ID,新包裹需添加到链表末尾。补全插入操作的代码。{{ input(5) }}

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

def insert_node(head, new_data):
    new_node = Node(new_data)
    if not head:
        return new_node
    current = head
    while current.next:
        current = current.next
    ______ = new_node  # 将新包裹链接到链表末尾
    return head