我意识到我不会将我的临时点归还给任何东西,但我能做些什么来解决这个问题呢?
现在它正确排序,但是当它排序下一层时,它们仍未被排除。
未提供的观点:
( - 2,-42) (-15,2) (32,8) (-26,21) (39,-42) (-40,-18) (-30,7) (-12,-28) (19,-16) (-16,-38)
SORTED POINTS:
( - 2,-42) (-15,2) (32,8) (-26,21) (39,-42) (-40,-18) (-30,7) (-12,-28) (19,-16) (-16,-38)
如果我使用调试器逐步执行我的程序,我可以看到它正确地对每个分区进行排序,但它不会延续到下一次合并。
private void mergeSortRec(Point[] pts)
{
int middle = pts.length / 2;
if( pts.length ==1)
{
return;
}
Point[] left = new Point[middle];
Point[] right = new Point[pts.length - middle];
for(int i = 0; i < middle; i++)
left[i] = pts[i];
for( int j = 0; j < pts.length - middle; j++ )
right[j] = pts[middle+j];
mergeSortRec(left);
mergeSortRec(right);
merge(left, right);
}
private Point[] merge(Point[] left, Point[] right)
{
int x = 0;
int i = 0;
int j = 0;
Point[] tempPoints = new Point[(left.length) + (right.length)];
while( i < left.length || j < right.length )
{
if( i < left.length && j < right.length)
{
if( pointComparator.compare(left[i], right[j]) == -1 )
{
tempPoints[x] = left[i];
x++;
i++;
}
else
{
tempPoints[x] = right[j];
x++;
j++;
}
}
else if (i == left.length)
{
tempPoints[x] = right[j];
x++;
j++;
}
else if( j == right.length)
{
tempPoints[x] = left[i];
x++;
i++;
}
}
return tempPoints;
}
答案 0 :(得分:0)
在mergeSortRec中,您不会返回任何内容。
左右数组得到排序和合并,但随后超出范围。尝试更改代码以返回合并结果。
答案 1 :(得分:0)
你没有对merge
的结果做任何事情,所以简单地丢弃了合并的数组。而且,您需要合并回原始数组。
更改您的merge
数组,将要合并的数组作为参数:
private void merge(Point[] left, Point[] right, Point[] pts)
并使用pts
代替tempPoints
;打电话给:
merge(left, right, pts);
因为pts
是您要更新的数组,并且长度正确。