问题标题: 酷町堂:3908

0
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;
}

 


0
已采纳
汪恺恒
汪恺恒
中级启示者
中级启示者

这题数据很大,要用归并排序求逆序对

0
0
王子耀
王子耀
缔造者
缔造者

https://cdtwd.oss-cn-shanghai.aliyuncs.com/static/images/superman.png

我要回答