必须为学校班级学习不同的排序方法,但遇到编码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'变量,其中包含生成年份,这是他们在此实例中排序的内容。这些在大多数电影中都会重复,但这似乎不会导致问题
(可以确认这是导致问题的代码,此作业的前几部分让我与其他方法分类,所有这些仍然有效)