mirror of
https://github.com/m1ngsama/code4sk.git
synced 2025-12-25 02:56:17 +00:00
75 lines
No EOL
2.1 KiB
C++
75 lines
No EOL
2.1 KiB
C++
/*
|
||
7-9 冒泡法排序之过程
|
||
分数 10
|
||
作者 颜晖
|
||
单位 浙大城市学院
|
||
本题要求使用冒泡法排序,将给定的n个整数从小到大排序后输出,并输出排序过程中每一步的中间结果。
|
||
|
||
冒泡排序的算法步骤描述如下:
|
||
|
||
第1步:在未排序的n个数(a[0]〜 a[n−1])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,数组中的最大元素“冒泡”到a[n−1];
|
||
|
||
第2步:在剩下未排序的n−1个数(a[0] 〜 a[n−2])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[n−2]中的最大元素“冒泡”到a[n−2];
|
||
|
||
……
|
||
|
||
第i步:在剩下未排序的n−k个数(a[0]〜a[n−i])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[n−i]中的最大元素“冒泡”到a[n−i];
|
||
|
||
……
|
||
|
||
第n−1步:在剩下未排序的2个数(a[0] 〜a[1])中,比较这两个数,若不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[1]中的最大元素“冒泡”到a[1]。
|
||
|
||
输入格式:
|
||
输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。
|
||
|
||
输出格式:
|
||
在每一行中输出排序过程中对应步骤的中间结果,即每一步后a[0]〜 a[n−1]的值,相邻数字间有一个空格,行末不得有多余空格。
|
||
|
||
输入样例:
|
||
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;
|
||
} |