MergeSort算法仅返回输入数组的一半

时间:2017-03-31 22:27:14

标签: java mergesort

必须为学校班级学习不同的排序方法,但遇到编码MergeSort的问题。希望有人能找到造成问题的原因。

public static Movie[] mergeSortYears(Movie[] M)
{
    Movie[] toReturn = new Movie[M.length];
    if(M.length>1)
    {
        int length = M.length/2;

        Movie[] LeftAr = Arrays.copyOfRange(M,0,length-1);

        Movie[] RightAr = Arrays.copyOfRange(M,length,M.length-1);

        Movie[] Left = mergeSortYears(LeftAr);
        Movie[] Right = mergeSortYears(RightAr);

        return mergeYears(Left,Right);
    }
    return M;
}

public static Movie[] mergeYears(Movie[] LeftAR, Movie[] RightAR)
{
    Movie[] Left = LeftAR;
    Movie[] Right = RightAR;
    int Total = LeftAR.length + RightAR.length;
    int i,li,ri;
    Movie[] M = new Movie[Total];
    i = 0;
    li = 0;
    ri = 0;
    while(i< Total)
    {
        if((li < Left.length) && (ri<Right.length))
        {
            if(Left[li].Year < Right[ri].Year)
            {
                M[i] = Left[li];
                i++;
                li++;
            }
            else
            {
                M[i] = Right[ri];
                i++;
                ri++;
            }
        }
        else
        {
            if(li >= Left.length)
            {
                while(ri<Right.length)
                {
                    M[i] = Right[ri];
                    i++;
                    ri++;
                }
            }
            if(ri >= Right.length)
            {
                while(li < Left.length)
                {
                    M[i] = Left[li];
                    li++;
                    i++;
                }
            }

        }
    }
    return M;
}

是的,我承认它并不完全'优雅',但这是我能做的最好的。但是当我调用该函数时会出现问题。我传入一个包含8'电影的数组(与作业有关),它返回正确排序但只有4个。真正绊倒我的是我无法弄清楚它是如何失去那些4.它不像“前4”或“最后4”失踪。每次都是完全相同的。

电影确实包含'Year'变量,其中包含生成年份,这是他们在此实例中排序的内容。这些在大多数电影中都会重复,但这似乎不会导致问题

(可以确认这是导致问题的代码,此作业的前几部分让我与其他方法分类,所有这些仍然有效)

0 个答案:

没有答案