逆序对

此博客展示了一段C++代码,实现了归并排序算法,并在排序过程中统计逆序对的数量。代码包含头文件引入、数组定义、归并排序函数及主函数,通过递归和双指针完成排序与计数操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[100100],r[100100];//根据题意
long long cnt=0;
void msort(int left,int right)
{    
    if (left>=right) return;
    int mid=(left+right)/2;
    msort(left,mid);
    msort(mid+1,right);
    int i=left;int j=mid+1;int k=left;
    while(i<=mid&&j<=right)
    {
        if(a[i]<=a[j]) 
        {r[k]=a[i];k++;i++;}
        else
        {
            r[k]=a[j];k++;j++;
        cnt=cnt+mid-i+1;
        cout<<cnt<<endl;
        }
        
    }
    while(i<=mid)
    {r[k]=a[i];k++;i++;}
    while(j<=right)
    {r[k]=a[j];k++;j++;}
    for(i=left;i<=right;i++) a[i]=r[i];//这里写成了a[i]=r[k],找半天了
}
int main()
{
    int n,i;
    cin>>n;
    for (i=1;i<=n;i++)
        cin>>a[i];
msort(1,n);
cout<<cnt<<endl;
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值