Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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?
           }