JAVA Hello, I am trying to use merge sort to sort an array of random numbers but
ID: 3670785 • Letter: J
Question
JAVA
Hello, I am trying to use merge sort to sort an array of random numbers but I am running into an index out of bounds exception.
If you could please alter the code I have, I think it is just one wrong line (the line I commented saying PROBLEM).
Thank you!
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;
public class Sort {
public static void main(String[] args) {
Random r = new Random();
int[] array = new int[10];
for (int i = 0; i <= array.length - 1; i++) {
int ran = r.nextInt(1000);
array[i] = Math.abs(ran);
System.out.print(array[i] + " ");
}
MergeSort(array);
System.out.println(" Merge Sort:");
for (int i = 0; i <= array.length; i++) {
System.out.print(array[i] + " ");
}
}
public static void MergeSort(int[]array){
int size=array.length;
if(size<2){
return;
}
int mid=size/2;
int leftsize=mid;
int rightsize=size-mid;
int[]left=new int[leftsize];
int[]right=new int[rightsize];
//left
for(int i=0;i<mid;i++){
left[i]=array[i];
}
//right
for(int i=0;i<size;i++){
right[1-mid]=array[mid];
//PROBLEM?
}
MergeSort(left);
MergeSort(right);
Merge(left,right,array);
}
public static void Merge(int[]left,int[]right,int[]array){
int leftsize=left.length;
int rightsize=right.length;
int i=0; //left
int j=0; //right
int k=0; //array
while(i<leftsize && j<rightsize){
if (left[i]<=right[j]){
array[k]=left[i];
i++;
k++;
}
else{
array[k]=right[j];
j++;
k++;
}
}
while (i<leftsize){
array[k]=left[i];
i++;
k++;
}
while(j<rightsize){
array[k]=right[j];
j++;
k++;
}
}
}
Explanation / Answer
The problem is with the loop condition, it should run only size-mid iterations only. Please find the corrected loop below :
for(int i=0;i<size-mid;i++){
right[1-mid]=array[mid];
//PROBLEM?
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.