数组中的逆序对

Posted earthhouge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组中的逆序对相关的知识,希望对你有一定的参考价值。

        在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数

private static long cnt = 0;
private static int[] temp;
public static int InversePairs(int[] array)
    temp = new int[array.length];
    mergeSort(array, 0, array.length - 1);
    return cnt;

private static void mergeSort(int[] nums, int l, int h)
    if (h - l < 1)
        return;
    
    int m = l + (h - l) / 2;
    mergeSort(nums, l, m);
    mergeSort(nums, m + 1, h);
    merge(nums, l, m, h);

private static void merge(int[] nums, int l, int m, int h)
    int i = l;
    int j = m + 1;
    int k = l;
    while (i <= m || j <= h)
        if (i > m)
            temp[k] = nums[j++];
        else if (j > h)
            temp[k] = nums[i++];
        else if (nums[i] < nums[j])
            temp[k] = nums[i++];
        else
            temp[k] = nums[j++];
            cnt += m - i + 1;
        
        k++;
    
    for (k = l; k <= h; k++)
        nums[k] = temp[k];
    

 

以上是关于数组中的逆序对的主要内容,如果未能解决你的问题,请参考以下文章

数组中的逆序对-剑指Offer

剑指offer35:数组中的逆序对

剑指OFFER 数组中的逆序对

数组中的逆序对

剑指offer——数组中的逆序对

数组中的逆序对