I am printing 2 lines to the console. They both print, but when the second is printed, the first changes to the second, so the two lines are identical. I have never encountered this before. Why does the second seal overwrite the first and how to fix it?
public static void main(String args[]){ new MergeSort(90000); System.out.println("Array to be mergesorted: " +Arrays.toString(array)); long start = System.currentTimeMillis(); mergeSort(array, 1, array.length); long end = System.currentTimeMillis(); System.out.println("Result: " + Arrays.toString(array) ); }
Constructor:
public MergeSort(int n){ Random rand = new Random(); array = new int[n]; for(int i = 0; i <array.length; i++){ array[i] = rand.nextInt(101); } }
The rest of the code:
public static void merge(int[] A, int p, int q, int r){ // //length of subarray 1 int n1 = q-p+1; //length of subarray 2 int n2 = rq; int[] L = new int[n1+1]; int[] R = new int[n2+1]; for(int i = 0; i < n1; i++){ L[i] = A[p+i-1]; } for(int j=0; j< n2; j++){ R[j] = A[q+j]; } L[n1] = Integer.MAX_VALUE; R[n2] = Integer.MAX_VALUE; int i = 0; int j = 0; for(int k = p-1; k < r; k++){ if(L[i] <= R[j]){ A[k] = L[i]; i++; } else{ A[k] = R[j]; j++; } } } public static void mergeSort(int[] A, int p, int r){ if (p<r){ int q = (int) Math.floor((r+p)/2); mergeSort(A, p, q); mergeSort(A, q+1, r); merge(A, p, q, r); } }
source share