Ho cercato di creare un MergeSort, ma ho un problema, un array di supporto, che chiamo S va fuori range e non capisco perchč:

codice:
public class MergeSort
{
	
	public static void main(String [] args)
	{
		int [] a={3,6,5,7,9,8,0,5};
		MSort(a,0,a.length-1);
		
	}
	
	
	public static void merge(int [] a, int left,int center, int right)
	{
		int [] S=new int[a.length];
		int i= left;
		int j=center+1;
		int k=0;
	
		
		while(i<=center && j<=right)
		{
			if(a[i]<=a[j])
			{
				S[k]=a[i];     //qui c'č l'errore
				i=i++;
			}
			else {
				S[k]=a[j];
				j=j++;
				}
				
				k++;
		}
		
		while(i<=center)
		{
			S[k++]=a[i];
			i=i++;
		}
		
		while(j<=right)
		{
			S[k++]=a[j];
			j=j++;
		}
		/* for (k =left; k!=right; k++) 
		a[k] =a[k - left];
		*/
		for(int b=0; b<S.length; b++)
		System.out.print(S[b]+" ");

	}
	
	
	public static void MSort(int [] a,int left, int right)
	{
		
		if(left<right)
		{
			
			int center=(left+right)/2;
				MSort(a,left,center);
				MSort(a,center+1,right);
				merge(a, left,center,right);
				
			
		}
	}
}
Volevo cerificare il funzionamento facendo una stampa, ma quello viene dopo, il problema č quello lģ, che non sto capendo a cosa sia dovuto.