0
已解决
梁逸凡
资深守护
资深守护
题目描述 Description
给定n个正整数的排列:a0,a1,a2,…,an-1,(1<=n<=500000),求对这个排列进行冒泡排序所需要的交换次数。
比如,原来的排列为:
5,4,6,3,1,2
排序后的排列为:
1,2,3,4,5,6
输入描述 Input Description
第一行输入一个正整数n,
后面行输入从1到n的n个正整数,按随机顺序排列,用空格隔开
输出描述 Output Description
一个正整数,表示冒泡排序的交换次数
TLE30
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<string>
using namespace std;
int a[500001],b[500001],flag;
int main(){
int n,t,m1=0,m2=0,m3=0,m4=0;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
b[i]=a[i];
}
for(int i=1;i<=n-1;i++){
flag=0;
for(int j=1;j<=n-i;j++){
if(b[j]>b[j+1]){
flag=1;
t=b[j];
b[j]=b[j+1];
b[j+1]=t;
m3++;
}
}
if(flag==0){
break;
}
}
cout<<m3;
return 0;
}