代码

hlt0310  •  1年前


#include<bits/stdc++.h>
using namespace std;
/*
时间限制 : 1 秒
内存限制 : 128 MB
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

现要求给定n(n<=10)个整数m(0<=m<=2^31-1),将n个数进行冒泡从大到小排序,并优化排序过程,需输出每一步排序数字。)

输入
第1行1个正整数n,表示数的个数,n≤10;

第2行n个整数(之间用一个空格隔开),这些数在0~2^31-1之间。

输出
输出每一次排序结果。

样例
输入复制
5
23 22 1 67 3
输出复制
23 22 67 3 1
23 67 22 3 1
67 23 22 3 1
输入复制
10
9 84 63 9 18 79 92 61 30 2010
输出复制
84 63 9 18 79 92 61 30 2010 9
84 63 18 79 92 61 30 2010 9 9
84 63 79 92 61 30 2010 18 9 9
84 79 92 63 61 2010 30 18 9 9
84 92 79 63 2010 61 30 18 9 9
92 84 79 2010 63 61 30 18 9 9
92 84 2010 79 63 61 30 18 9 9
92 2010 84 79 63 61 30 18 9 9
2010 92 84 79 63 61 30 18 9 9
提示
注意:如果冒泡排序后已经是从大到小的顺序则无需再进行排序。
*/
long long n,i,j,a[101];
int main()
{
	scanf("%lld",&n);
	for(i=1;i<=n;++i) scanf("%lld",a+i);
	for(i=n;i>1;--i){
		bool flag=true;
		for(j=1;j<i;++j)
			if(a[j]<a[j+1]){
				flag=false;
				swap(a[j],a[j+1]);
			}
		if(flag) break;
		for(j=1;j<=n;++j) printf("%lld ",a[j]);
		putchar('\n');
	}
	return 0;
}

评论:

请先登录,才能进行评论