6

这可能是一个简单的问题,但我有两个数组,每个数组大约 1000 个元素,它们被称为posXArrayand posYArray。我想按posYArray数字排序(首先是最小的数字),但我希望元素posXArray对它们应用相同的操作......

例如,如果元素 [56] ofposYArray是最小的一个,我希望元素 [56] ofposXArray也被移动到 [0]。

这是如何以简单/好的方式在 Java 中实现的?

非常感谢您的帮助!

4

4 回答 4

8

由于数组似乎包含 X 和 Y 坐标,也许更好的选择是创建一个包含这两个值的坐标类,实现Comparable并使用内置算法对单个数组进行排序?

于 2013-04-04T09:04:50.083 回答
2

创建一个类,如:

public class XYPos implements Comparable<XYPos> {
    int x;
    int y;

    @Override
    public int compareTo(XYPos o) {
        int res = this.y - o.y;
        if(res == 0) {
            res = this.x - o.x;
        }
        return res;
    }
}

然后:

  1. 将您的 2 个数组转换为一个数组XYPos
  2. 把它分类
  3. 使用排序数组中的值更新您的 2 个原始数组
于 2013-04-04T09:10:27.287 回答
1

创建一个Integer[] idx相同长度的并用数字 0 到 999(或其他)填充它,然后使用比较器对这个数组进行排序

public int compare(Integer a, Integer b) {
  return posYArray[a] - posYArray[b];
}

这将为您提供一个索引到其他数组的数组,即最小的 Y 值将是posYArray[idx[0]],其对应的 X 将是posXArray[idx[0]]等。如果您不想保持间接性,您可以按idx值重新排序原始数组.

如果您经常做这种事情,您可能希望查看fastutil,它提供了直接对原始类型(例如int.

于 2013-04-04T09:10:45.063 回答
0

您可以实现您选择的任何排序算法,仅对第一个 (posXArray) 进行比较检查,然后同时交换两个数组中元素的位置。

于 2013-04-04T09:06:12.110 回答