i writing merge sort , i'm getting arrayindexoutofbounds exception , can't figure out why.
here code:
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 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 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)); } }
several issues, try following code:
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 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)); } }
Comments
Post a Comment