繁体   English   中英

不能让我的mergeSort几个小时后工作

[英]Cant get my mergeSort working after several hours

*嘿。 所以我的mergeSorting遇到了问题。 我尝试了不同的方法和方法,但无法使其正常工作。 我了解mergeSorting的原理,所以没有问题。 这是我的方法:

public static void TopDownMergeSort(int[] left, int[] right, int n){
    TopDownSplitMerge(left, 0, n, right);
}

public static void CopyArray(int[] right, int start, int end, int[] left){
    for (int i = start;i < end; i++){
        right[i] = left[i]; 
    }
}

public static void TopDownSplitMerge(int[] left, int start, int end, int[] right){
    if (end - start < 2){
        int middle = (end + start)/2;
        TopDownSplitMerge(left, start, middle, right);
        TopDownSplitMerge(left, middle, end, right);
        TopDownMerge(left, start, middle, end, right);
        CopyArray(right, start, end, left);
    }
}

public static void TopDownMerge(int[]left, int start, int middle, int end, int[]right){

    int i1 = start, i2 = middle;

    for (int i = start; i < end; i++){
        if (i1 < middle && (i2 >= end || left[i1] <= left[i2])){
            right[i] = left[i1++];
        }
        else {
            right[i] = left[i2++];
        }
    }
}

public static int[] mergeSort(int[] in) {
    int[] arr = in.clone();
    int[] temp = in.clone();

    TopDownSplitMerge(arr,0,arr.length,temp);
    return arr;
}

这就是我测试mergeSort的方式。

int[] list = {2,5,8,6,9,7,3,4};

        System.out.println("Before mergesort: "+Arrays.toString(list));

        int[] ne = SortingAlgorithms.mergeSort(list);

        System.out.println("After mergesort: "+Arrays.toString(ne));
if (end - start < 2)

是错的。 它应该是

if (end - start > 2)

一些提示: CopyArray可以由System.arraycopy替换...另外还要重新考虑: if (end - start < 2)

我建议您检查一下Thomas H. Cornmen撰写的《算法简介》,而不是修改代码。

暂无
暂无

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

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