Mergesort in java

后端 未结 12 542
予麋鹿
予麋鹿 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:11

    public class MyMergeSort {
    
        private int[] array;
        private int[] tempMergArr;
        private int length;
    
        public static void main(String a[]){
    
            int[] inputArr = {45,23,11,89,77,98,4,28,65,43};
            MyMergeSort mms = new MyMergeSort();
            mms.sort(inputArr);
            for(int i:inputArr){
                System.out.print(i);
                System.out.print(" ");
            }
        }
    
        public void sort(int inputArr[]) {
            this.array = inputArr;
            this.length = inputArr.length;
            this.tempMergArr = new int[length];
            doMergeSort(0, length - 1);
        }
    
        private void doMergeSort(int lowerIndex, int higherIndex) {
    
            if (lowerIndex < higherIndex) {
                int middle = lowerIndex + (higherIndex - lowerIndex) / 2;
                // Below step sorts the left side of the array
                doMergeSort(lowerIndex, middle);
                // Below step sorts the right side of the array
                doMergeSort(middle + 1, higherIndex);
                // Now merge both sides
                mergeParts(lowerIndex, middle, higherIndex);
            }
        }
    
        private void mergeParts(int lowerIndex, int middle, int higherIndex) {
    
            for (int i = lowerIndex; i <= higherIndex; i++) {
                tempMergArr[i] = array[i];
            }
            int i = lowerIndex;
            int j = middle + 1;
            int k = lowerIndex;
            while (i <= middle && j <= higherIndex) {
                if (tempMergArr[i] <= tempMergArr[j]) {
                    array[k] = tempMergArr[i];
                    i++;
                } else {
                    array[k] = tempMergArr[j];
                    j++;
                }
                k++;
            }
            while (i <= middle) {
                array[k] = tempMergArr[i];
                k++;
                i++;
            }
    
        }
    }
    

提交回复
热议问题