Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 阵列中的反转数_Java_Arrays_Mergesort_Inversion - Fatal编程技术网

Java 阵列中的反转数

Java 阵列中的反转数,java,arrays,mergesort,inversion,Java,Arrays,Mergesort,Inversion,我试图找出任何数组中的反转数。我已经申请过了。当合并子数组时,如果右子数组的任何值小于左子数组的任何值,我会计算数字。如果数组包含大量数据,则此代码不起作用 private static long getNumberOfInversions(int[] a, int[] b, int left, int right) { long numberOfInversions = 0; if (right > left) {

我试图找出任何数组中的反转数。我已经申请过了。当合并子数组时,如果右子数组的任何值小于左子数组的任何值,我会计算数字。如果数组包含大量数据,则此代码不起作用

private static long getNumberOfInversions(int[] a, int[] b, int left,
                int right)
{
    long numberOfInversions = 0;
    if (right > left)
    {
        int ave = (left + right) / 2;
        numberOfInversions = getNumberOfInversions(a, b, left, ave);
        numberOfInversions += getNumberOfInversions(a, b, ave + 1, right);
        numberOfInversions += merge(a, b, left, ave + 1, right);
    }
    return numberOfInversions;
}

public static long merge(int[] a, int b[], int left, int ave, int rigth)
{
    int i = 0, j = left, k = ave;
    long count = 0;
    while (j <= ave - 1 && k <= rigth)
    {
        if (a[j] <= a[k])
        {
            b[i] = a[j];
            i++;
            j++;
        }
        else
        {
            b[i] = a[k];
            count += ave - j;
            i++;
            k++;
        }
    }
    while (j <= ave - 1)
    {
        b[i] = a[j];
        i++;
        j++;

    }
    while (k <= rigth)
    {
        b[i] = a[k];
        i++;
        k++;
    }
    while (left <= rigth)
    {
        a[left] = b[i];
        left++;
        i++;
    }
    return count;
}

public static void main(String[] args)
{
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    int[] a = new int[n];
    for (int i = 0; i < n; i++)
    {
        a[i] = scanner.nextInt();
    }
    int[] b = new int[n];
    System.out.println(getNumberOfInversions(a, b, 0, n - 1));
}
private static long getNumberOfInversions(int[]a,int[]b,int left,
整数(右)
{
长倒数=0;
如果(右>左)
{
int ave=(左+右)/2;
numberOfInversions=获取numberOfInversions(a、b、左、ave);
numberOfInversions+=获取numberOfInversions(a、b、ave+1,右);
numberOfInversions+=合并(a、b、左、ave+1、右);
}
返回倒数;
}
公共静态长合并(int[]a,int[]b,int-left,int-ave,int-right)
{
int i=0,j=left,k=ave;
长计数=0;

虽然(j)您是否尝试使用IDE调试来检查代码行为?是否编写了代码测试?我测试了我的代码。当一个大的数据集被给定时,它给出了错误的答案。但是我找不到逻辑的错误。请提供一个您应该考虑使用的方法:您是否尝试使用IDE调试来检查您的代码行为?您是否编写了任何测试?对于你的代码?我测试了我的代码。当一个大的数据集被给予时,它给出了错误的答案。但是我找不到我的逻辑的错误。请提供一个你也应该考虑使用。