中位数定义:一组数据按从小到大的顺序依次排列,处在中间位置的一个数(或最中间两个数据的平均数)。
给出一组无序整数,求出中位数,如果求最中间两个数的平均数,向下取整即可(不需要使用浮点数)。
该程序包含一组测试数据,是一个包含1千万个整数的二进制文件,这些数字的值都在0~100000范围内。
输出中位数。
使用如下的代码将二进制文件读取为整数数组,耗时约为150毫秒~180毫秒。
private static int[] readIntArray() { int[] array = new int[10000000]; try (ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(System.in))) { for (int i = 0; i < 10000000; i ++) { array[i] = in.readInt(); } } catch (Exception ignore) { } return array; }
使用如下代码计算中位数,耗时约为2000毫秒
private static int getMedian(int[] array) { int middle = 0; int size = array.length; Arrays.sort(array); if(size % 2 == 0){ middle = (array[size/2-1]+array[size/2])/2; }else{ int inx = size/2; middle = array[inx]; } return middle; }