题目描述
输入n及n个不超过10000的正整数,用冒泡排序算法将数据按从小到大的顺序输出。
输入
第一行只有一个正整数:n 第二行共有n个正整数,数与数之间有一个空格
输出
第一行只有一个正整数:k 表示规范的冒泡排序算法中数据交换的总次数 第二行共有n个按从小到大排序后的正整数,数与数之间有一个空格
样例输入
5
1 5 4 2 3
样例输出
5
1 2 3 4 5
提示
第一轮冒泡排序时:2与4交换、2与5交换,共交换了2次,结果为 1 2 5 4 3
第二轮冒泡排序时:3与4交换、3与5交换,共交换了2次,结果为 1 2 3 5 4
第三轮冒泡排序时:4与5交换,只交换了1次,结果为 1 2 3 4 5
第四轮冒泡排序时:无数据交换,结果也是 1 2 3 4 5
四轮冒泡排序过程中,共进行了5次数据交换
【数据规模】 30% 的数据: 2 <= n <= 10 70% 的数据: 2 <= n <= 100 100% 的数据: 2 <= n <= 1 000
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,a[1001],k,s=0;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
{
k=i;
for(int j=i+1;j<=n;j++)
if(a[j]<a[k])
k=j;
if(k!=i)
{
for(int j=k;j>i;j--)
{
swap(a[j],a[j-1]);
s++;
}
}
}
cout<<s<<endl;
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";
return 0;
}