Here you can find the source of getMedianIndex(float[] sorted, float value)
public static float getMedianIndex(float[] sorted, float value)
//package com.java2s; /**// w w w. j a va2 s.co m * ** * /** * Copyright (C) 2012 Jean Ollion * * * * This file is part of tango * * tango is free software; you can redistribute it and/or modify it under the * terms of the GNU General Public License as published by the Free Software * Foundation; either version 3 of the License, or (at your option) any later * version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program. If not, see <http://www.gnu.org/licenses/>. * * @author Jean Ollion */ import java.util.Arrays; public class Main { public static float getMedianIndex(float[] sorted, float value) { int idxMin, idxMax; idxMin = Arrays.binarySearch(sorted, value); //duplicate => median value idxMax = idxMin; while (idxMin > 0 && sorted[idxMin - 1] == sorted[idxMax]) idxMin--; while (idxMax < sorted.length - 1 && sorted[idxMax + 1] == sorted[idxMin]) idxMax++; if (idxMax != idxMin) return (idxMin + idxMax) / 2.0f; else return idxMin; } public static float getMedianIndex(double[] sorted, double value) { int idxMin, idxMax; idxMin = Arrays.binarySearch(sorted, value); //duplicate => median value idxMax = idxMin; while (idxMin > 0 && sorted[idxMin - 1] == sorted[idxMax]) idxMin--; while (idxMax < sorted.length - 1 && sorted[idxMax + 1] == sorted[idxMin]) idxMax++; if (idxMax != idxMin) return (idxMin + idxMax) / 2.0f; else return idxMin; } }