📜  门|门CS 2010 |问题 21(1)

📅  最后修改于: 2023-12-03 15:42:22.502000             🧑  作者: Mango

门|门CS 2010 |问题 21

这是一道程序设计题目,需要用到基本的数学知识和编程语言的理解。

题目描述

有 $n$ 个人排队过门,每个人有一个身高值。要求按照身高从高到低的顺序重新排列这些人。但是每个人都只能向前或者向后移动一步,不能跨越其他人。给出原来的队列顺序以及每个人的身高值,编写一个程序,输出重新排列后的队列。

输入格式

第一行输入一个整数 $n$($1 \leq n \leq 100$)表示排队的人数。

第二行输入 $n$ 个整数,表示原来每个人的身高值。

输出格式

输出一行,表示重新排列后的队列。

样例输入
5
170 180 166 168 158
样例输出
180 170 168 166 158
解题思路

这道题使用冒泡排序或者选择排序都可以实现,但是从实际需求出发,使用冒泡排序的效率更高。

具体思路如下:

  • 外层循环控制比较次数 $i$,从 $0$ 到 $n-1$;
  • 内层循环控制每次比较 $j$ 和 $j+1$ 两个元素的大小,如果 $a_j < a_{j+1}$ 就交换两个元素的位置。

代码实现如下:

n = int(input())
heights = list(map(int, input().split()))

for i in range(n - 1):
    for j in range(n - 1):
        if heights[j] < heights[j+1]:
            heights[j], heights[j+1] = heights[j+1], heights[j]

print(" ".join(map(str, heights)))
总结

通过这道题,我们学会了使用冒泡排序算法的具体实现过程,也练习了将一组元素按照给定条件重新排序的能力。这对于提高程序的效率和代码的质量都有很大的帮助。