繁体   English   中英

Java中的Coreman MergeSort实现无法产生正确的输出

[英]Coreman MergeSort implementation in java is not producing correct output

我正在尝试在Java中实现Coreman的MergeSort算法。 但这总是给我错误的输出。

排序前:[86、8、60、9、49、73、37、59、98、69]

排序后:[8,8,9,37,37,49,49,59,69,69]

以下是我的代码:

public class MergeSort {
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MergeSort mergeSort = new MergeSort();
        int [] data = mergeSort.createRandomNumberArray();
        mergeSort.print("Before sorting", data);
        long startTime = System.currentTimeMillis();
        mergeSort.sort(data);
        long endTime = System.currentTimeMillis();
        mergeSort.print("After Sorting", data);
        mergeSort.time(startTime, endTime);

    }

    public void sort(int[] data) {
        if(data == null)
            throw new NullPointerException();
        if(data.length == 0 || data.length == 1) {
            System.out.println("Size is " + data.length);
            return;
        }

        int length = data.length;
        mergeSort(data, 0, length - 1);
    }

    /**
     * @param data
     * @param first
     * @param last
     */
    private void mergeSort(int[ ] data, int first, int last) {
        if(first < last) {
            int middle = (first + last) / 2;
            mergeSort(data, first, middle);
            mergeSort(data, middle + 1, last);
            merge(data, first, middle, last);
        }
    }

    private void merge(int[ ] data, int first, int middle, int end) {    
        int lSize = middle - first + 1;
        int rSize = end - middle;
        int [] left = new int[lSize + 1];
        left[lSize] = Integer.MAX_VALUE;
        int [] right = new int[rSize + 1];
        right[rSize] = Integer.MAX_VALUE;
        for(int i = 0; i < lSize; i++) {
            left[i] = data[first + i];
        }

        for(int j = 0; j < rSize; j++) {
            right[j] = data[middle + j + 1];
        }

        print("Left: ", left);
        print("Right: ", right);

        int lIndex = 0;
        int rIndex = 0;

        for(int k = first; k < end; k++) { 
            if(left[lIndex] <= right[rIndex]) {
                data[k] = left[lIndex];
                lIndex++;
            } else {
                data[k] = right[rIndex];
                rIndex++;
            }
        }
    }


    public void print(String message, int [] array) {
        System.out.println(message + " : " + Arrays.toString(array));
    }

    public int [] createRandomNumberArray() {
        int [] data = new int[] {86,8,60,9,49,73,37,59,98,69} ;
        /*int [] data = new int[SIZE];
        for(int i = 0; i < SIZE; i++) {
            data[i] = RANDOM.nextInt(RANGE);
        }*/
        return data;
    }

    public long time(long start, long end) {
        long time = end - start;
        System.out.println("Time taken in sorting ==> " + time);
        return time;
    }

}

我试图打印值并调试代码,但无法在这里找出问题所在。 请在这里提出可能出问题的地方。

   for(int k = first; k < **=**end; k++) { 
                if(left[lIndex] <= right[rIndex]) {
                    data[k] = left[lIndex];
                    lIndex++;
                } else {
                    data[k] = right[rIndex];
                    rIndex++;
                }
            }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM