Java 合并排序抛出错误
我正在编写一个合并排序,得到了一个Java 合并排序抛出错误,java,mergesort,Java,Mergesort,我正在编写一个合并排序,得到了一个arrayIndexOutOfBounds异常,我不知道为什么 代码如下: public class MergeSort { private int[] helper; private int[] numbers; private int number; //sort method public MergeSort(int[] values){ this.numbers = values;
arrayIndexOutOfBounds
异常,我不知道为什么
代码如下:
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));
}
}
公共类合并排序{
私人助理;
私有int[]编号;
私有整数;
//排序方法
公共合并排序(int[]值){
这个数字=数值;
this.number=values.length;
this.helper=newint[number];
合并(0,数字1);
}
//合并排序方法
公共无效合并(整数低,整数高){
如果(低几个问题,请尝试以下代码:
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));
}
}
公共类合并排序{
私人助理;
私有int[]编号;
私有整数;
//排序方法
公共合并排序(int[]值){
这个数字=数值;
this.number=values.length;
this.helper=newint[number];
合并(0,数字1);
}
//合并排序方法
公共无效合并(整数低,整数高){
if(low)有什么不同?我很难弄清楚。循环从更改为(int ii=0;III如果我使用iiApologies,你不能做III-我错过了那条评论。那么,引发异常时的局部变量是什么?ii=6
并且两个数组都有10个元素注意:错误在下面一行。很抱歉。请参阅更新代码。那么它必须是kk
。继续:)