找到2D阵列的中位数

时间:2014-03-13 23:29:10

标签: java arrays sorting multidimensional-array median

如果参数是名为int[][]的{​​{1}},您如何找到它的中位数?

很抱歉,如果我的格式错误,那是我第一次来这里。

计算数组中每个int的整个2d数组的中位数。

所有行的长度都相同,例如:

1 4 3 2 5

4 5 3 2 9

4 7 8 98 24

2 个答案:

答案 0 :(得分:0)

如果我正确地解释了你的问题,你会像找到任何数字集的中位数一样:

  1. 浏览2D数组中的每个元素,将每个数字添加到临时列表中。
  2. 对列表进行排序。
  3. 抓住中心元素(如果列表长度为奇数)或两个中心的平均值(如果列表长度为偶数)。
  4. 只要您将计算中包含的所有数字都包含在某种排序列表中,就可以找到中位数。如果您的原始数据不是很好(例如2D数组或任何其他数据结构),则您必须创建一个临时列表以在计算过程中使用。

    顺便说一下,ArrayList<Integer>是一个不错的选择。

答案 1 :(得分:0)

请删除你的一个问题,你提出了两个几乎相同的问题..

import java.util.Arrays;

public class Median {

public static void main(String[] args) {
    int[][] array2d = {
            {1, 4, 3, 2, 5},
            {4, 5, 3, 2, 9},
            {4, 7, 8, 98, 24}
    };
    // Create a new list to store the items
    int[] list = new int[array2d.length*array2d[0].length];
    // keep track of where we are.
    int listPos = 0;
    // iterate over the entire 2d array adding each integer
    for(int i = 0 ; i < array2d.length; i++) {
        for(int j = 0; j < array2d.length; j++) {
            list[listPos++] = array2d[i][j];
        }
    }
    // sort the list.
    Arrays.sort(list);
    System.out.println(median(list));
}

/**
 * Finds the median in an Array of integers.
 * @param m Array of integers
 * @return the median value
 */
public static double median(int[] m) {
    int middle = m.length/2;
    if (m.length%2 == 1) {
        return m[middle];
    } else {
        return (m[middle-1] + m[middle]) / 2.0;
    }
}

}