随笔 - 147  文章 - 5  评论 - 6  阅读 - 81298

CLRS2.4__逆序对

#include<iostream>
using namespace std;
 
 
int main(int argc,char* argv[])
{
    int Merge_Count(int*,int,int);
    int merge(int*,int,int,int);
 
    int A[]={2,3,8,6,1};
 
    cout<<Merge_Count(A,0,4)<<endl;;
 
    system("pause");
    return 0;
}
 
int Merge(int* A,int p,int q,int r)
{
    int n1=q-p;
    int n2=r-q;
    int i,j;
 
    int *L=new int[n1+1]();
    int* R=new int[n2+1]();
 
    for(i=0;i<n1;i++)
        L[i]=A[p+i];
    for(i=0;i<n2;i++)
        R[i]=A[q+i+1];
 
    L[n1]=INT_MAX;
    R[n2]=INT_MAX;
 
    i=0;j=0;
    int inversion=0;
    bool counted=false;
    for(int k=p;k<=r;k++)
    {
        if(counted==false && L[i]>R[j])
        {
            inversion+=n1-i+1;
            counted=true;
        }
        if(L[i]<R[j])
            i++;
        else
        {
            j++;
            counted=false;
        }
    }
    delete []L;
    delete []R;
 
    return inversion;
}
 
int Merge_Count(int* A,int p,int r)
{
    int count=0;
    if(p<r)
    {
        int q=(p+r)/2;
        int l1=Merge_Count(A,p,q);
        int l2=Merge_Count(A,q+1,r);
        count=l1+l2+Merge(A,p,q,r);
    }
    return count;
}

  

posted on   紫金树下  阅读(119)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
< 2012年5月 >
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9

点击右上角即可分享
微信分享提示