java - 归并排序示例

标签 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 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]);

    }

}

当我运行这个程序时,我得到的输出是

3
1
6
2
9

但是,预期输出是 1 2 3 6 9

任何人都可以帮我指出我犯的错误并尝试帮助我修复它。我尝试在 Eclipse 上调试它,但无法发现错误。 谢谢

最佳答案

您确定您在函数Merge中表示的是这个意思吗:

MergeSort(b, left, right);

看起来应该是:

MergeSort(a, left, right);

关于java - 归并排序示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25830101/

相关文章:

algorithm - 归并排序计算复杂度时 "cn"到底是什么?

c++ - 并行mergesort C++中的性能问题

java方法返回null但不应该

java - 我如何使用改造和recyclerView解析json对象

java - onSave()(对于使用 Hibernate/Spring Data Repositories 保存的任何实体)

java - 异常 : "No adapter for handler. Does your handler implement a supported interface like controller?"

java - 具有不同轴的嵌套 BoxLayout

运行该程序时需要常量表达式错误

java - arrayoutofbounds 异常 - 合并排序 (CLRS)

java - JTree 中对每个节点使用复选框进行部分选择