java - 我的倒置计数算法有什么问题?

标签 java algorithm mergesort

该代码适用于 {3,3,3,3}、{1,2,3,4}、{2,4,1,3,5} 等测试用例。但事实并非如此为 {1,20,6,4,5,2,7,3,5} 工作,应该返回 18 个反转。我的代码让我进行了 16 次反转。

class Test{ 
    static int count =0;

    public static void main(String[] agrs) {
        int[] arr = new int[] {1,20,6,4,5,2,7,3,5};                
        sort(arr);
        System.out.println("\n"+count);
    }

    private static void sort(int[] arr) {
        int length = arr.length;
        int tempArr[] = new int[length];
        divideAndConquer(arr,tempArr,0,length-1);
    }

    private static void divideAndConquer(int[] arr, int[] tempArr, int low, int high) {
        if(low < high){
            int middle = low + (high - low) / 2;
            divideAndConquer(arr, tempArr, low, middle);
            divideAndConquer(arr, tempArr, middle + 1, high);
            merge(arr, tempArr, low, middle, high);
        }
    }

    private static void merge(int[] arr, int[] tempArr, int low, int middle,int high) {
        for (int i = low; i <= high; i++)
                tempArr[i] = arr[i];

        int i = low, j = middle + 1, k = low;

        while (i <= middle && j <= high) {
            if(tempArr[i] < tempArr[j]) {
                arr[k] = tempArr[i];
                i++;
            }
            else {
                arr[k] = tempArr[j];
                if(tempArr[i] != tempArr[j])
                count += middle+1 - i;  
                System.out.println(count);
                j++;
            }
            k++;
        }

        while (i <= middle) {
            arr[k] = tempArr[i];
            k++;
            i++;
        }
    }
}

最佳答案

换行就行了

if(tempArr[i] < tempArr[j]) {

if(tempArr[i] <= tempArr[j]) {

问题就解决了。

关于java - 我的倒置计数算法有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35629631/

相关文章:

algorithm - 图的最大子图数

algorithm - 如何使用按位运算符找到 n 位整数的对数基数 2 的底?

c++ - 归并排序的实现

java - 如何在 JSP 声明中使用 JSTL

java - Mongodb Java cmd find().pretty() 不工作

Java get()时间方法

php - 我应该如何使用 PHP 散列我的密码?

c++ - 在 C++ 中使用归并排序计算倒置

javascript - 了解归并排序中具有返回值的递归

java - Qt 如何在 Android 上运行?