private static List<double[]> findNeighbors( List<double[]> data, double[] target, double maxDistance, int maxN) { List<double[]> ret = new ArrayList<double[]>(); List<double[]> found = new ArrayList<double[]>(); GrowQueue_F64 distances = new GrowQueue_F64(); GrowQueue_I32 indexes = new GrowQueue_I32(); for (int i = 0; i < data.size(); i++) { double[] d = data.get(i); double dx = d[0] - target[0]; double dy = d[1] - target[1]; double dist = dx * dx + dy * dy; if (dist <= maxDistance) { distances.add(dist); found.add(d); } } indexes.resize(distances.size); maxN = Math.min(maxN, distances.size); QuickSelectArray.selectIndex(distances.data, maxN, distances.size, indexes.data); for (int i = 0; i < maxN; i++) { ret.add(found.get(indexes.data[i])); } return ret; }