P1203 冒泡排序-升序排列

暂无评定 传统题 GESP数组排序循环结构 上传者
时间限制1000ms
内存限制256MiB
通过 / 提交0/0

P1203冒泡排序-升序排列

暂无评定 传统题 GESP数组排序循环结构 上传者
时间限制1000ms
内存限制256MiB
通过 / 提交0/0

故事引入

小竞有一堆乱序的数字卡片,他想按照从小到大的顺序排好。他决定用“冒泡排序”的方法:
每一轮,他从左到右比较相邻的两张卡片,如果左边比右边大,就把它们交换位置。这样,每一轮结束后,最大的数字就会像气泡一样“浮”到最右边。
如果某一轮没有任何交换发生,说明卡片已经全部排好序,就可以提前结束啦!


你的任务

输入 n 个整数,请你用冒泡排序的方法,把它们按从小到大(升序)排列。
在排序过程中,你需要输出每一轮结束后的数组状态(也就是每一轮比较完后的结果),但只输出发生了交换的轮次。如果某一轮没有发生任何交换,就直接结束排序(不再继续后面的轮次,也不输出这一轮的结果)。

最后,输出最终的排序结果。


输入格式

  • 第一行:一个整数 n,表示数字的个数(1 ≤ n ≤ 1000)。
  • 第二行:n 个整数,用空格隔开。

输出格式

  1. 第一行:先输出 Initial: ,然后输出初始的数组,数字之间用空格隔开。
  2. 接下来的若干行:每一轮结束后,如果这一轮中至少发生了一次交换,就输出 Round X: (X 是第几轮,从 1 开始),然后输出这一轮结束后的数组状态,数字之间用空格隔开。
  3. 最后一行:输出 Sorted array: ,然后输出最终排好序的数组,数字之间用空格隔开。

注意:

  • 如果某一轮没有发生任何交换,那么这一轮不输出,并且整个排序过程立刻停止(不再继续后面的轮次)。
  • 请严格按照样例的格式输出,包括冒号、空格等。

样例输入

5
5 3 8 1 2

样例输出

Initial: 5 3 8 1 2
Round 1: 3 5 1 2 8
Round 2: 3 1 2 5 8
Round 3: 1 2 3 5 8
Sorted array: 1 2 3 5 8

样例解释(逐步讲解)

初始数组:5 3 8 1 2

  • 第 1 轮(比较 4 次,把最大的 8 移到最右边):

    1. 比较 5 和 3 → 5 > 3,交换 → 数组变成 3 5 8 1 2
    2. 比较 5 和 8 → 5 < 8,不交换 → 3 5 8 1 2
    3. 比较 8 和 1 → 8 > 1,交换 → 3 5 1 8 2
    4. 比较 8 和 2 → 8 > 2,交换 → 3 5 1 2 8
      第 1 轮发生了交换,所以输出 Round 1: 3 5 1 2 8
  • 第 2 轮(比较前 4 个数,把剩下的最大数 5 移到倒数第 2 位):

    1. 比较 3 和 5 → 3 < 5,不交换 → 3 5 1 2 8
    2. 比较 5 和 1 → 5 > 1,交换 → 3 1 5 2 8
    3. 比较 5 和 2 → 5 > 2,交换 → 3 1 2 5 8
      第 2 轮发生了交换,输出 Round 2: 3 1 2 5 8
  • 第 3 轮(比较前 3 个数):

    1. 比较 3 和 1 → 3 > 1,交换 → 1 3 2 5 8
    2. 比较 3 和 2 → 3 > 2,交换 → 1 2 3 5 8
      第 3 轮发生了交换,输出 Round 3: 1 2 3 5 8
  • 第 4 轮(理论上应该比较前 2 个数): 比较 1 和 2 → 1 < 2,不交换 → 这一轮没有任何交换,所以直接结束排序,不输出第 4 轮。

  • 最后数组已经排好序:1 2 3 5 8,输出 Sorted array: 1 2 3 5 8


重要提示

  • 你必须自己编写冒泡排序。
  • 记得使用优化标志(比如一个 bool 变量 swapped),如果某一轮没有交换,就提前结束。
  • 输出时注意空格和标点符号,要和样例完全一致。

冒泡排序是排序算法里最形象的算法之一,就像杯子里的小气泡慢慢上浮。