#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