I'm printing 2 lines to the console.
They both print, but when the second one has printed, the first one changes to the
second one, so the 2 lines are identical. I've never encountered this before. Why does
the second print overwrite the first one, and how do I 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)
);
}
The
constructor:
public MergeSort(int
n){
Random rand = new Random();
array = new int[n];
for(int i = 0; i array[i] =
rand.nextInt(101);
}
}
Rest of
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 = r-q;
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 int q = (int)
Math.floor((r+p)/2);
mergeSort(A, p, q);
mergeSort(A, q+1,
r);
merge(A, p, q, r);
}
}
No comments:
Post a Comment