如何找到数组对象的中位数?

时间:2016-02-20 04:43:56

标签: java arrays sorting median

立即参加编程课程,我感到很困惑。我们基本上需要声明一个中位数方法,它将找到数组对象中包含的值的中位数,我不知道在这种情况下如何操作它。此外,我不知道如何分离阵列的各个部分或如何获得特定的"中间块"数组的排序,有点像合并排序,但我们还没有接近那个。

我整个星期都在努力解决这个问题。这是我的所有代码。 任何提示或提示都会令人惊讶。谢谢

class ArrayIns {
    private long[] a;
    private int nElems; // number of data items

    public ArrayIns(int max) { // constructor
        a = new long[max]; // create array
        nElems = 0; // no items yet
    } 

    public void insert(long value) {
        a[nElems] = value;
        nElems++;
    }

    public void display() {
        for(int j=0; j<nElems; j++)
            System.out.print(a[j]  + "  ");
        System.out.println("");
    }

    public void insertionSort() {
        int in, out;

        for(out=1; out<nElems; out++) {         // out is dividing the line
            long temp = a[out];                 // remove marked item
            in = out;                           // start shifts at our
            while(in>0 && a[in-1] >= temp) {    // until one is smaller,
                a[in] = a[in-1];        // shift item to right
                --in;               // go left one position
            }
            a[in] = temp;       // insert marked item
        } // end of for statement
    } // end of insertion sort
} // end of ArrayIns

class InsertSortApp {
    public static void main(String[] args) {
        int maxSize = 100;
        ArrayIns arr;
        arr = new ArrayIns(maxSize);

        arr.insert(77); // insert 10 items
        arr.insert(99); // 10 is also even :)
        arr.insert(44);
        arr.insert(55);
        arr.insert(22);
        arr.insert(88);
        arr.insert(11);
        arr.insert(00);
        arr.insert(66);
        arr.insert(33);

        arr.display();

        arr.insertionSort();

        arr.display();
    } // end of main()
} // end of InsertSortApp class

3 个答案:

答案 0 :(得分:1)

首先,您是否测试了排序算法以确定其有效?它是否正确地对数组进行排序?

如果排序算法正常工作,那么获得中位数很简单。首先,确定它是否具有奇数或偶数个元素。如果它具有奇数个元素,则中位数是长度为2的元素。如果它具有偶数个元素,则中位数是元素的平均长度/ 2 - 1和长度/ 2。

答案 1 :(得分:0)

方法中位数;
  - 将数组作为输入
  - sort content of array
  - find length of array
  - find the index of middle
  - 返回具有中间索引的数组的值

答案 2 :(得分:-1)

将以下方法添加到ArrayIns

 public long median() {
    if (nElems % 2 == 0) {
        int index1 = nElems/2-1;
        return (a[index1]+a[index1+1]) / 2;
    }
    return a[nElems/2];
}

排序后从main()调用:

long median = arr.median();