算法--逆序对

来源:互联网 发布:淘宝开店心得体会范文 编辑:程序博客网 时间:2024/06/15 23:01

逆序对

设 A 为一个有 n 个数字有序集 (n>1),其中所有数字各不相同。

如果存在正整数 i, j 使得 1 ≤ i < j ≤ n 而且 A[i] > A[j],则 <A[i], A[j]> 这个有序对称为 A 的一个逆序对,也称作逆序数。

解法一:

说明:穷举,两层for循环依次比对。

输入:数组A[]

输出:逆序对数目

Java代码:

public static int countInversion(int[] a){
        int n=a.length;
        int count=0;
        for(int i=0;i<n;i++){
            for(int j=i+1;j<n;j++){
                if(a[i]>a[j])count++;
            }
        }
        return count;
      }

解法二:

分治法

输入:数组A[]

输出:逆序对数目

Java代码:

static int[] a;
    static int[] b;
    static int count=0;
    public static int countInversion(int[] a){
        int n=a.length;
        int count=0;
        for(int i=0;i<n;i++){
            for(int j=i+1;j<n;j++){
                if(a[i]>a[j])
                    count++;
            }
        }
        return count;
    }
    public static void merger(int begin,int end){

        int mid=(begin+end)/2;
        int p=begin,q=mid+1;
        int k=begin;
        while(p<=mid&&q<=end){
            if(a[p]<=a[q]){
                b[k++]=a[p++];
            }else{
                b[k++]=a[q++];
                count+=mid-p+1;
                //System.out.println(begin+" "+end+":"+(mid-p+1));
            }
        }
        while(p<=mid)b[k++]=a[p++];
        while(q<=end)b[k++]=a[q++];
       
        //copy
        for(int i=begin;i<=end;i++){
            a[i]=b[i];
        }
    }
    public static void mergerInversion(int begin,int end){
        if(begin<end){
            int mid=(begin+end)/2;
            mergerInversion(begin,mid);
            mergerInversion(mid+1,end);
            merger(begin,end);
        }
    }

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 东莞住房公积金 资阳住房公积金查询 西安市住房公积金查询系统 郑州住房公积金查询 连云港市住房公积金查询系统 上海住房公积金查询个人账户 滁州住房公积金查询 住房公积金办理条件 住房公积金怎么交 住房公积金密码是什么 赣州住房公积金查询个人账户 南宁市住房公积金中心 昆山住房公积金查询 住房公积金办理 宜宾住房公积金查询 连云港住房公积金查询 柳州住房公积金管理中心 个人住房公积金查询 南宁市住房公积金 住房公积金异地买房 滁州市住房公积金管理中心 住房公积金查询个人账户查询 吉林市住房公积金 洛阳市住房公积金管理中心 河北省住房公积金查询 内蒙古住房公积金管理中心 常州住房公积金管理中心 住房公积金中心 无锡住房公积金管理中心 重庆住房公积金管理中心 吉林省住房公积金 黄石住房公积金查询个人账户 唐山住房公积金管理中心 唐山住房公积金 遵义市住房公积金查询 湖南省住房公积金查询 深圳市住房公积金 保定住房公积金管理中心 阜阳住房公积金查询 临沂住房公积金查询 呼和浩特住房公积金管理中心