java - Merge Sort throwing error -


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