逆序对个数

题目

一个数列,如果左边的数大,右边的数小,则称这两个数为一个逆序对。求出一个数列中右多少个逆序对。

解法1

暴力遍历所有可能的数对。

java 复制代码
package com.company;

public class Test17 {
    public static void main(String[] args) {
        int[] arr={1	,4	,9,	6	,2,	8,	7	,3	,5};

        int count=0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = i+1; j < arr.length; j++) {
                if(arr[i]>arr[j]){
                    count++;
                }
            }
            System.out.println(count);
        }
        System.out.println(count);
    }
}

解法2

在归并排序的过程中,如果左半部分的数大于右半部分的数,则出现了逆序对,并且不止一个。

java 复制代码
package com.company;

import java.util.Arrays;

public class Test18 {
    public static int count=0;
    public static void main(String[] args) {
        int[] arr={1	,4	,9,	6	,2,	8,	7	,3	,5};

        sort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
        System.out.println(count);
    }
    public static void sort(int[] arr,int fromIndex,int toIndex){
        if(toIndex-fromIndex<=0){
            return;
        }
        int mid=(fromIndex+toIndex)/2;
        sort(arr,fromIndex,mid);
        sort(arr,mid+1,toIndex);
        int[] help=new int[toIndex-fromIndex+1];
        int i=mid,j=toIndex,k=help.length-1;
        while(i>=fromIndex && j>=mid+1){
            if(arr[i]>arr[j]){
                count=count+(j-mid);

                help[k]=arr[i];
                k--;
                i--;
            }else{
                help[k]=arr[j];
                k--;
                j--;
            }
        }
        System.out.println(count);
        while(i>=fromIndex){
            help[k]=arr[i];
            k--;
            i--;
        }
        while(j>=mid+1){
            help[k]=arr[j];
            k--;
            j--;
        }
        i=fromIndex;
        k=0;
        for (int l = fromIndex; l <=toIndex ; l++) {
            arr[l]=help[l-fromIndex];
        }
    }
}
相关推荐
平凡但不平庸的码农6 小时前
Go Slice 详解
算法·golang
想学习java初学者7 小时前
SpringBoot整合Vertx-Mqtt多租户(优化版)
java·spring boot·后端
AC赳赳老秦7 小时前
政企内网落地:OpenClaw 离线环境深度适配方案,无外网场景下本地化模型对接与全功能使用
java·大数据·运维·python·自动化·deepseek·openclaw
weixin_449173657 小时前
在 Java 中,‌线程安全的 List‌ 主要有以下几种实现方式,它们的效率取决于具体的使用场景(尤其是读写比例):
java·线程安全的list
砚底藏山河8 小时前
股票数据API接口:如何获取股票历历史分时KDJ数据
java·python·maven
MegaDataFlowers9 小时前
运行若依项目
java
lulu12165440789 小时前
JetBrains IDE 终极AI编程方案:CC GUI插件让Claude Code和Codex丝滑运行
java·ide·人工智能·python·ai编程
Jasmine_llq10 小时前
《B3867 [GESP202309 三级] 小杨的储蓄》
算法·循环遍历·数组累加(模拟)·索引定位·顺序输出
啦啦啦_999910 小时前
案例之 逻辑回归_电信用户流失预测
算法·机器学习·逻辑回归
('-')10 小时前
八股复习2:Java Array list和Linked list
java·开发语言