美文网首页
【归并排序应用】求数组中的逆序对

【归并排序应用】求数组中的逆序对

作者: ___Qian___ | 来源:发表于2019-03-08 15:30 被阅读0次

题目描述
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。
题目保证输入的数组中没有的相同的数字


public class Solution {
    int cnt;
 
    public int InversePairs(int[] array) {
        cnt = 0;
        if (array != null)
            mergeSort(array, 0, array.length - 1);
        return cnt;
    }

    /*
     * 归并排序
     */
    public void mergeSort(int[] a, int start, int end) {
        if (start >= end)
            return;
        int mid = (start + end) >> 1;
 
        mergeSort(a, start, mid);
        mergeSort(a, mid + 1, end);
 
        merge(a, start, mid, end);
    }
 
    /*
     * 将一个数组中的两个相邻有序区间合并成一个
     */
    public void merge(int[] a, int start, int mid, int end) {

        int[] tmp = new int[end - start + 1];
 
        int i = start, j = mid + 1, k = 0;

        while (i <= mid && j <= end) {
            if (a[i] <= a[j])
                tmp[k++] = a[i++];
            else {
                tmp[k++] = a[j++];
                cnt += mid - i + 1;            // 计算逆序对
            }
        }

        while (i <= mid)
            tmp[k++] = a[i++];
        while (j <= end)
            tmp[k++] = a[j++];

        for (k = 0; k < tmp.length; k++)
            a[start + k] = tmp[k];
    }
}

相关文章

  • ologn排序算法后的两个问题

    求一个数组的逆序数对的个数(归并排序) 求出nums里第k小的数(快速排序)

  • Chapter6——基础算法——排序

    1. 题目列表 POJ2388(排序,水题) POJ2299(求逆序对,归并排序、树状数组、线段树) 2. PO...

  • 05-28:新刷算法题

    1、归并排序 数组逆序对的参考思路: https://zhuanlan.zhihu.com/p/107280674...

  • 排序算法

    常考排序 快速排序 归并排序 归并排序求逆序数对 堆排序 堆排序是指利用堆这种数据结构所设计的一种排序算法。 堆积...

  • 【归并排序应用】求数组中的逆序对

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

  • 基于左闭右开的乱序数组归并排序 2020-04-24(未经允许,

    归并排序代码模板 递归形式思路:二分nums数组后对nums的归并排序 = 对左侧数组归并排序+对右侧数组归并排序...

  • 归并排序求逆序对

    归并排序 归并排序是我们最常使用的排序算法之一,作用是将两个或两个以上的有序数组合并成为一个新的数组,主要使用的是...

  • 2020-07-07 刷题5 二叉树,逆序对,数组

    63 数组中的逆序对 经典归并排序,divide+merge。在merge时,如果左半边某个元素(i)大于右半边的...

  • 二分(三分)

    题目链接:二分·归并排序之逆序对 题目链接:三分·三分求极值

  • 数组的逆序对

    思路:归并排序每次把数组从中间拆分成两部分,先统计拆分数组内部的逆序对,再把这个数组排序,防止统计重复,最后再把拆...

网友评论

      本文标题:【归并排序应用】求数组中的逆序对

      本文链接:https://www.haomeiwen.com/subject/iphkpqtx.html