Mergesort in java

后端 未结 12 543
予麋鹿
予麋鹿 2020-12-03 06:09

I am new to Java and have tried to implement mergesort in Java. However, even after running the program several times, instead of the desired sorted output, I am getting the

12条回答
  •  星月不相逢
    2020-12-03 06:34

    Here is a corrected version of your code:

    import java.io.*;
    import java.util.Arrays;
    
    
    public class MergeSort {
    
        public static void main(String[] args) throws IOException{
            BufferedReader R = new BufferedReader(new InputStreamReader(System.in));
            int arraySize = Integer.parseInt(R.readLine());
            int[] inputArray = new int[arraySize];
            for (int i = 0; i < arraySize; i++) {
                inputArray[i] = Integer.parseInt(R.readLine());
            }
            mergeSort(inputArray);
    
            for (int j = 0; j < inputArray.length; j++) {
                System.out.println(inputArray[j]);
            }
    
        }
    
        static void mergeSort(int[] A) {
            if (A.length > 1) {
                int q = A.length/2;
    
    //changed range of leftArray from 0-to-q to 0-to-(q-1)
                int[] leftArray = Arrays.copyOfRange(A, 0, q-1);
    //changed range of rightArray from q-to-A.length to q-to-(A.length-1)
                int[] rightArray = Arrays.copyOfRange(A,q,A.length-1);
    
                mergeSort(leftArray);
                mergeSort(rightArray);
    
                merge(A,leftArray,rightArray);
            }
        }
    
        static void merge(int[] a, int[] l, int[] r) {
            int totElem = l.length + r.length;
            //int[] a = new int[totElem];
            int i,li,ri;
            i = li = ri = 0;
            while ( i < totElem) {
                if ((li < l.length) && (ri= l.length) {
                        while (ri < r.length) {
                            a[i] = r[ri];
                            i++;
                            ri++;
                        }
                    }
                    if (ri >= r.length) {
                        while (li < l.length) {
                            a[i] = l[li];
                            li++;
                            i++;
                        }
                    }
                }
            }
            //return a;
    
        }
    
    }
    

提交回复
热议问题