C语言学习记录5 — 习题2

习题2 — 冒牌排序过程输出(不输出重复部分)

题目描述

给出一组正整数,请你用冒泡排序的方式把这组数据从小到达排列,要求每经过一轮排序都要把当前数据的状态输出并且排序完成后立即停止循环。

输入

第一行输入一个正整数n,表示这组数据的个数。
第二行输入n个正整数。

样例输入

1
2
8
49 38 65 97 76 13 27 49

输出

输出若干行,每行n个数,表示每经过一轮排序之后的数据(若输入数据有序,则无输出!!)。

样例输出

1
2
3
4
5
38 49 65 76 13 27 49 97
38 49 65 13 27 49 76 97
38 49 13 27 49 65 76 97
38 13 27 49 49 65 76 97
13 27 38 49 49 65 76 97

代码实现如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
int main() {
int i, j, temp, n;
scanf("%d", &n);

int flag = 0;//布尔标记值
int a[1000];

for (int m = 0; m < n; m++)
{
scanf("%d", &a[m]);
getchar();
}
for (i = 0; i < n - 1; i++) { //1
for (j = 0; j < n - 1; j++) { //2
if (a[j] > a[j + 1]) {
flag = 1;
//进行循环则改变布尔标记值,当顺序排好(a[j]<a[j+1])后不进行循环
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}

if (!flag) {
break; /*循环1的break,判断标记值,若不为0,break退出循环1,输出结束*/
}else {
flag = 0;
}
for (int k = 0; k < n; k++)
printf("%d ", a[k]);
printf("\n");

}

return 0;
}

C语言学习记录5 — 习题2
http://example.com/post/text7-cstudy-5.html
作者
Destiny
发布于
2024年4月8日
更新于
2024年5月24日
许可协议