题解:蓝桥云课 3225 宝藏排序Ⅰ
【题目来源】
蓝桥云课:1.宝藏排序Ⅰ - 蓝桥云课 (lanqiao.cn)
【题目描述】
在一个神秘的岛屿上,有一支探险队发现了一批宝藏,这批宝藏是以整数数组的形式存在的。每个宝藏上都标有一个数字,代表了其珍贵程度。然而,由于某种神奇的力量,这批宝藏的顺序被打乱了,探险队需要将宝藏按照珍贵程度进行排序,以便更好地研究和保护它们。作为探险队的一员,肖恩需要设计合适的排序算法来将宝藏按照珍贵程度进行从小到大排序。请你帮帮肖恩。
【输入】
输入第一行包括一个数字 \(n\),表示宝藏总共有 \(n\) 个。
输入的第二行包括 \(n\) 个数字, 第 \(i\) 个数字 \(a[i]\) 表示第 \(i\) 个宝藏的珍贵程度。
【输出】
输出 \(n\) 个数字,为对宝藏按照珍贵程度从小到大排序后的数组。
【输入样例】
5
1 5 9 3 7
【输出样例】
1 3 5 7 9
【解题思路】


【算法标签】
《蓝桥云课 3225 宝藏排序I》 #排序#
【代码详解】
# 使用冒泡排序方法编写
n = int(input()) # 输入n
a = [int(i) for i in input().split()] # 输入a列表
for i in range(1, n): # 遍历n-1次
for j in range(0, n-i): # 从0遍历到n-i-1(因为是左闭右开的区间,所以为n-i)
if a[j]>a[j+1]: # 两两比较,大的交换到后面去
a[j],a[j+1] = a[j+1],a[j]
for i in range(len(a)): # 遍历a列表并输出
print(a[i], end=" ")
# 使用选择排序方法编写
n = int(input()) # 输入n
a = [int(i) for i in input().split()] # 输入a列表
for i in range(n-1): # 遍历n-1次
min_value = a[i] # 每次初始化最小值
min_idx = i # 及其下标
for j in range(i, n): # 从i遍历到n-1(下标从0开始)
if a[j]<min_value: # 如果小于最小值
min_value = a[j] # 更新最小值及下标
min_idx = j
a[i],a[min_idx] = a[min_idx],a[i] # 将最前面的值(未排序的)与最小值交换
for i in range(len(a)): # 遍历a列表并输出
print(a[i], end=" ")
# 使用插入排序方法编写
n = int(input()) # 输入n
a = [int(i) for i in input().split()] # 输入a列表
for i in range(1, n): # 从1遍历至n-1(从后往前找,所以不能从0开始)
value = a[i] # 记录下当前值
insert_idx = 0 # 设置插入下标
for j in range(i-1, -1, -1): # 从后向前查找
if a[j]>value: # 如果a[j]大于当前值
a[j+1] = a[j] # 则向后移
else: # 如果小于当前值
insert_idx = j+1 # 就要在j的后面插入当前值
break # 退出循环
a[insert_idx] = value # 插入当前值
for i in range(len(a)): # 遍历a列表并输出
print(a[i], end=" ")
【运行结果】
5
1 5 9 3 7
1 3 5 7 9
浙公网安备 33010602011771号