Mergesort in java

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

    The above codes are a little confused Never use variables with names: "k", "j", "m",... this makes the code very confusing

    Follows the code in an easier way...

    import java.util.Arrays;
    
    public class MergeSort {
    
        public static void main(String[] args) {
            Integer[] itens = {2,6,4,9,1,3,8,7,0};
    
            Integer[] tmp = new Integer[itens.length];
            int left = 0;
            int right = itens.length - 1;
    
            mergeSort(itens, tmp, left, right);
    
            System.out.println(Arrays.toString(itens));
        }
    
        private static void mergeSort(Integer[] itens, Integer[] tmpArray, int left, int right) {
    
            if(itens == null || itens.length == 0 || left >= right){
                return;
            }
    
            int midle = (left + right) / 2;
    
            mergeSort(itens, tmpArray, left, midle);
            mergeSort(itens, tmpArray, midle + 1, right);
    
            merge(itens, tmpArray, left, midle + 1, right);
        }
    
        private static void merge(Integer[] itens, Integer[] tmpArray, int left, int right, int rightEnd) {
            int leftEnd = right - 1;
            int tmpIndex = left;
    
            while (left <= leftEnd && right <= rightEnd){
                if (itens[left] < itens[right] ){
                    tmpArray[tmpIndex++] = itens[left++];
                } else {
                    tmpArray[tmpIndex++] = itens[right++];
                }
            }
    
            while (left <= leftEnd) { // Copy rest of LEFT half
                tmpArray[tmpIndex++] = itens[left++];
            }
            while (right <= rightEnd) { // Copy rest of RIGHT half
                tmpArray[tmpIndex++] = itens[right++];
            }
            while(rightEnd >= 0){ // Copy TEMP back
                itens[rightEnd] = tmpArray[rightEnd--];
            }
        }
    }
    

提交回复
热议问题