数组中求逆序对的个数

在归并排序的过程中计算,时间复杂度降低

public int InversePairs(int [] array) {
        if(array==null||array.length==0) return 0;
        int count=merge(array,0,array.length-1);
        return count;
    }
    private int merge(int[] array, int left, int right) {
        if(left==right) return 0;
        int mid=(left+right)/2;
        int leftCount=merge(array,left,mid);
        int rightCount=merge(array,mid+1,right);
        int i=left,j=mid+1;
        int res=leftCount+rightCount;
        int[] temp=new int[right-left+1];
        int k=0;
        while(i<=mid&&j<=right) {
            if(array[i]<=array[j]) {
                temp[k++]=array[i++];
            }
            else {
                res+=mid-i+1;
                if(res>=1000000007)//数值过大求余
                {
                    res%=1000000007;
                }
                temp[k++]=array[j++];
            }
        }
        while (i <= mid)
             temp[k++] = array[i++];
        while (j <= right)
             temp[k++] = array[j++];
        for (k = 0; k < temp.length; k++)
             array[left + k] = temp[k];
        return res%1000000007;    
    }

 

posted @ 2019-07-24 14:01  LeeJuly  阅读(407)  评论(0)    收藏  举报