【发布时间】:2011-04-26 00:39:33
【问题描述】:
我有一个二维数组,表示构成矩形的点网格的 x 和 y 坐标。使用的数据集通常非常大。我想对从左上角开始并沿平行对角线移动直到右下角的点进行排序。我正在使用 Arrays.sort 函数和以下比较器来执行此操作:
public int compare(Object o1, Object o2) {
double[] a1 = (double[])o1;
double[] a2 = (double[])o2;
if (a1[0]+a1[1] > a2[0]+a2[1]) return 1;
else if (a1[0]+a1[1] < a2[0]+a2[1]) return -1;
else {
if (a1[0] > a2[0]) return 1;
else if (a1[0] < a2[0]) return -1;
else return 0;
}
}
当每个点的 x 和 y 坐标相隔两位数时,由于某种原因,该代码有效,但如果它们仅相隔一位,则排序会出错。
可以在此处找到原始订单的示例: http://www.mediafire.com/?slq73v3zn2zs98l
可以在此处找到生成的排序列表的示例: http://www.mediafire.com/?x8f08q0qoof398w
为什么排序不起作用?非常感谢任何帮助!
【问题讨论】:
-
你的比较功能是假的。
-
使用静态方法 Double.compare(a, b),这将简化编写您自己版本的比较方法。
-
您能解释一下您的意思吗:“我想对从左上角开始并沿平行对角线移动直到右下角的点进行排序。”?
-
@Mr E 很抱歉导致图片和 mediafire 链接不好,但我想不出其他解释。我正在尝试这样排序:mediafire.com/i/?g6w20shw99gox0b
-
@PEdroArthur 我应该做些什么来减少它的虚假?
标签: java arrays sorting mergesort