java - 合并排序抛出错误

标签 java mergesort

我正在编写一个合并排序,我得到一个 arrayIndexOutOfBounds异常(exception),我不明白为什么。

这是代码:

public class MergeSort {

    private int[] helper; 
    private int[] numbers; 

    private int number; 

    //sort method
    public MergeSort(int[] values){
        this.numbers = values; 
        this.number = values.length; 
        this.helper = new int[number]; 
        merge(0, number-1); 
    }

    //mergeSort method
    public void merge(int low, int high){
        if(low<high){
            int mid =(low+high)/2;  
            merge(low, mid); 
            merge(mid+1, high); 
            combine(low, mid, high);  
        }
    }
    //merge method
    public void combine(int low, int mid, int high){
        //copy numbers into helper array;
        for(int ii=0;ii<high;ii++){
            this.helper[ii]=this.numbers[ii]; 
        }
        int ii = low;
        int jj = mid+1;
        int kk = high; 
        while((ii <= mid) && (jj<=high)){

            if(helper[ii] <= helper[jj]){
                    //error is thrown here
                this.numbers[kk] = this.helper[ii];
                ii++; 
            }else{
                this.numbers[kk] = this.helper[jj]; 
                jj++; 
            }
            kk++;
        }
        while(ii<=mid){
            this.numbers[kk]=this.helper[ii]; 
            kk++;
            ii++;
        }

    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        int[] values = new int[]{2,6,1,9,12,64,32,23,12,90,87}; 
        // TODO Auto-generated method stub
        MergeSort ms = new MergeSort(values); 
        System.out.println(Arrays.toString(ms.numbers)); 
    }

}

最佳答案

有几个问题,但请尝试以下代码:

public class MergeSort {

    private int[] helper;
    private int[] numbers;

    private int number;

    //sort method
    public MergeSort(int[] values){
        this.numbers = values;
        this.number = values.length;
        this.helper = new int[number];
        merge(0, number-1);
    }

    //mergeSort method
    public void merge(int low, int high){
        if(low<high){
            int mid =(low+high)/2;
            merge(low, mid);
            merge(mid+1, high);
            combine(low, mid, high);
        }
    }
    //merge method
    public void combine(int low, int mid, int high){
        //copy numbers into helper array;
        for(int ii=low;ii<=high;ii++){
            this.helper[ii]=this.numbers[ii];
        }
        int ii = low;
        int jj = mid+1;
        int kk = low;
        while((ii <= mid) && (jj<=high)){
            if(helper[ii] <= helper[jj]){
                this.numbers[kk] = this.helper[ii];
                ii++;
            }else{
                this.numbers[kk] = this.helper[jj];
                jj++;
            }
            kk++;
        }
        while(ii<=mid){
            this.numbers[kk]=this.helper[ii];
            kk++;
            ii++;
        }

    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        int[] values = new int[]{2,6,1,9,12,64,32,23,12,90,87};
        // TODO Auto-generated method stub
        MergeSort ms = new MergeSort(values);
        System.out.println(Arrays.toString(ms.numbers));
    }

}

关于java - 合并排序抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16391801/

相关文章:

perl - 我在 Perl 中的合并排序实现有什么问题?

java - IllegalArgumentException 阻止我启动 tomcat

java - Python 与 Java/C 的集成

java - Facebook 登录按钮在点击时导致应用程序崩溃

arrays - 为什么自顶向下归并排序中数组访问是 6NlogN?

c - Ubuntu 给我错误的输出

c++ - 倒置计数带来麻烦(修改归并排序的实现)

java - 没有默认构造函数

java - 用数组在java applet中绘制条形图

在我的主目录上调用我的链接列表的合并排序