Java 合并排序示例

Java 合并排序示例,java,mergesort,Java,Mergesort,我是Java新手,我尝试过编写一个合并排序程序。 MergeSort.java程序如下:- public class MergeSort { public static int b[] = {6,2,3,1,9}; public void MergeSort(int a[],int left[], int right[]) { int i = 0,j = 0,k = 0; int l = left.length; int

我是Java新手,我尝试过编写一个合并排序程序。 MergeSort.java程序如下:-

public class MergeSort {

    public static int b[] = {6,2,3,1,9};

    public void MergeSort(int a[],int left[], int right[]) {

        int i = 0,j = 0,k = 0;

        int l = left.length;

        int r = right.length;
        int v = a.length;

        while ( i < l && j < r) {
            if( left[i] < right[j]) {
                a[k] = left[i] ;
                i++;
            } else {
                a[k] = right [j];
                j++;
            }
            k++;
        }
        while ( i < l ) {
            a[k] = left[i];
            k++;
            i++;

        }
        while ( j < r ) {
            a[k] = right[j];
            k++;
            j++;

        }

    }

    public void Merge(int a[], int length) {


        int n = length;
        if(n < 2) return;
        int mid = n/2;

        int left[] = new int[mid];
        int right[] = new int[n-mid];
        for (int i = 0 ; i <mid ; i++) {
            left[i] = a[i];
        }
        for (int i = mid ; i <n ; i++) {
            right[i-mid] = a[i];
        }

        Merge(right,n-mid);
        Merge(left,mid);
        MergeSort(b, left, right);

    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub


        MergeSort ms = new MergeSort();
        ms.Merge(b,b.length);
        for(int i=0 ; i < b.length ; i++)
        System.out.println(b[i]);

    }

}
但是,预期的输出是
12369

有谁能帮我指出我正在犯的错误并试着帮我修复它吗?我已经试过在Eclipse上调试它,但是没有发现错误。
谢谢

您确定在函数合并中是这样说的吗:

MergeSort(b, left, right);
似乎应该是:

MergeSort(a, left, right);

你确定你在函数
合并
中的意思是:

MergeSort(b, left, right);
似乎应该是:

MergeSort(a, left, right);

你确定你在函数
合并
中的意思是:

MergeSort(b, left, right);
似乎应该是:

MergeSort(a, left, right);

你确定你在函数
合并
中的意思是:

MergeSort(b, left, right);
似乎应该是:

MergeSort(a, left, right);


我必须通过已经拆分的数组而不是原来的数组。@ NexBee,我建议您为变量使用更好的名称。当然,请考虑我下一个代码的建议:)NeBee还试图避免使用类名作为方法的名称,以避免混淆和代码可读性。在您的案例“MergeSort”@Newbie遵循
@dilip
建议的情况下,您的方法名称应该是
split
merge
。也要检查小写。我必须通过已经拆分的数组而不是原来的数组。@ NexBee我建议你为变量使用更好的名称。当然会考虑下一个代码的建议:)NeBee还试图避免使用类名作为方法的名称,以避免混淆和代码可读性。在您的案例“MergeSort”@Newbie遵循
@dilip
建议的情况下,您的方法名称应该是
split
merge
。也要检查小写。我必须通过已经拆分的数组而不是原来的数组。@ NexBee我建议你为变量使用更好的名称。当然会考虑下一个代码的建议:)NeBee还试图避免使用类名作为方法的名称,以避免混淆和代码可读性。在您的案例“MergeSort”@Newbie遵循
@dilip
建议的情况下,您的方法名称应该是
split
merge
。也要检查小写。我必须通过已经拆分的数组而不是原来的数组。@ NexBee我建议你为变量使用更好的名称。当然会考虑下一个代码的建议:)NeBee还试图避免使用类名作为方法的名称,以避免混淆和代码可读性。在您的案例“MergeSort”@Newbie遵循
@dilip
建议的情况下,您的方法名称应该是
split
merge
。还要检查小写。为什么
合并排序
将三个
数组
作为形式参数?只需要一个要排序的
数组
,以及两个
int
值来跟踪
数组
的末端<代码>合并排序
合并排序
方法中创建一个临时数组,在对元素进行排序后,将该临时
数组
的内容复制到原始
数组
,这与
快速排序
不同,为什么
合并排序
使用三个
数组
作为形式参数?只需要一个要排序的
数组
,以及两个
int
值来跟踪
数组
的末端<代码>合并排序
合并排序
方法中创建一个临时数组,在对元素进行排序后,将该临时
数组
的内容复制到原始
数组
,这与
快速排序
不同,为什么
合并排序
使用三个
数组
作为形式参数?只需要一个要排序的
数组
,以及两个
int
值来跟踪
数组
的末端<代码>合并排序
合并排序
方法中创建一个临时数组,在对元素进行排序后,将该临时
数组
的内容复制到原始
数组
,这与
快速排序
不同,为什么
合并排序
使用三个
数组
作为形式参数?只需要一个要排序的
数组
,以及两个
int
值来跟踪
数组的末端<代码>合并排序在
合并排序
方法中创建一个临时数组,在对元素进行排序后,然后将该临时
数组的内容复制到原始
数组
,这与
快速排序
不同。