code4sk/c/sourcecode/朱森森带领的奇妙冒险/2022-2023第二学期单开班第2次月考/冒泡法排序之过程.cpp
2023-12-15 22:38:26 +08:00

75 lines
No EOL
2.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
7-9 冒泡法排序之过程
分数 10
作者 颜晖
单位 浙大城市学院
本题要求使用冒泡法排序将给定的n个整数从小到大排序后输出并输出排序过程中每一步的中间结果。
冒泡排序的算法步骤描述如下:
第1步在未排序的n个数a[0]〜 a[n1]从a[0]起依次比较相邻的两个数若邻接元素不符合次序要求则对它们进行交换。本次操作后数组中的最大元素“冒泡”到a[n1]
第2步在剩下未排序的n1个数a[0] 〜 a[n2]从a[0]起依次比较相邻的两个数若邻接元素不符合次序要求则对它们进行交换。本次操作后a[0] 〜 a[n2]中的最大元素“冒泡”到a[n2]
……
第i步在剩下未排序的nk个数a[0]〜a[ni]从a[0]起依次比较相邻的两个数若邻接元素不符合次序要求则对它们进行交换。本次操作后a[0] 〜 a[ni]中的最大元素“冒泡”到a[ni]
……
第n1步在剩下未排序的2个数a[0] 〜a[1]比较这两个数若不符合次序要求则对它们进行交换。本次操作后a[0] 〜 a[1]中的最大元素“冒泡”到a[1]。
输入格式:
输入第一行给出一个不超过10的正整数n。第二行给出n个整数其间以空格分隔。
输出格式:
在每一行中输出排序过程中对应步骤的中间结果即每一步后a[0]〜 a[n1]的值,相邻数字间有一个空格,行末不得有多余空格。
输入样例:
5
8 7 6 0 1
输出样例:
7 6 0 1 8
6 0 1 7 8
0 1 6 7 8
0 1 6 7 8
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
*/
#include <stdio.h>
int main()
{
int n, i, j, k;
scanf("%d", &n);
int a[n];
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
if (n == 1)
printf("%d", a[0]);
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - i - 1; j++)
{
if (a[j] > a[j + 1])
{
int t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
printf("%d", a[0]);
for (k = 1; k < n; k++)
{
printf(" %d", a[k]);
}
printf("\n");
}
return 0;
}