归并排序的问题,
数组越界归并排序
源码如下:    
package AllKindsOfSort;
public class MergingSort {
  void Merge(int[] sourceArr,int[] toArr,int i,int m,int n)
	{
	//i为数组sourceArr的起始,m为归并的分界,一般设为sourceArr.length/2,n为末位置
	   int j,k;
	   for(j=m+1,k=i;j<=n&&i<=m;++k)
	   {
		   if(sourceArr[i]<=sourceArr[j])toArr[k]=sourceArr[i++];//归并,把大的放到目的数组中
		   else toArr[k]=sourceArr[j++];
	   }
	   if(j<=n)while(j<=n&&k<=m){toArr[k++]=sourceArr[j++];}//剩余的直接复制到目的数组
	   if(i<m)while(i<m&&k<=n){toArr[k++]=sourceArr[i++];}
	}
void MSort(int[] sourceArr,int[] toArr,int start,int end)
	{
	  if(start==end)//一次递归的结束条件,就是只剩下一个元素的时候
		  {
		  	toArr[start]=sourceArr[start]; //1. 总是在这里抛出错误:
		  	                               //
ArrayIndexOutOfBoundsException: 2
		  			  }
	   else
	   {
		   int m=(start+end)/2+1;//得到分界
		   int[] toArr1= new int[end-start+1];
		   MSort(sourceArr,toArr1,start,m-1);//递归调用,排序m前面的部分
		   MSort(sourceArr,toArr1,m,end);//m后面的部分
		   Merge(toArr1,toArr,start,m,end);//把两个部分和在一起
	   }
	}
  void MergeSort(int[] sourceArr)
	{
	 MSort(sourceArr,sourceArr,0,sourceArr.length-1);	  
	}
public static void main(String[] args)
{
    int[] arr=new int[]{23,54,23,1,54,98,435,34,756123,547,87,459,561,3};	
    MergingSort ms=new MergingSort();
    ms.MergeSort(arr);
     for(int arrI:arr)
    {
	   System.out.print(arrI+" ");
    }
}
}
程序总是在1处出现数组越界的错误,我查了还几遍,还是老样子,忘各路高手解答!
------解决方案--------------------public class MergeSort {
   public static int[] sort(int[] number1,  
                            int[] number2) {
       int[] number3 =  
                  new int[number1.length + number2.length];      
       int i = 0, j = 0, k = 0;  
       while(i < number1.length && j < number2.length) {  
           if(number1[i] <= number2[j])  
               number3[k++] = number1[i++];  
           else  
               number3[k++] = number2[j++];  
       }  
       while(i < number1.length)  
           number3[k++] = number1[i++];  
       while(j < number2.length)  
           number3[k++] = number2[j++];      
       return number3;
   }
}
------解决方案--------------------debug this program,the step before Exception occured there has:
toArr:[0] [1]
start:2
end:2
toArr[start] throw the Array
IndexOutOfBoundsException.