2016-02-20 3 views
1

Взять класс программирования прямо сейчас, и я смущен макс. Мы в основном должны объявить медианный метод, который найдет медиану значений, содержащихся в объекте массива, и я не знаю, как манипулировать этим в этом сценарии. Кроме того, я не знаю, как разделять части массива или как получить конкретные «средние куски» массива, вроде как при сортировке слияния, однако мы даже не приблизились к этому.Как найти медиану объекта массива?

Я боролся с этой проблемой всю неделю. Вот мой код. Любые советы или подсказки были бы потрясающими. Спасибо

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 

ответ

-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]; 
} 

А из основного() вызова после вас сортировки:

long median = arr.median(); 
0

Метод Медиана;
- взять массив в качестве входного
- sort content of array
- find length of array
- find the index of middle
- возвращаемое значение массива со средним индексом

+0

Хороший ответ, связывая с существующими решениями. Некоторый поддерживающий код был бы полезен –

1

Во-первых, вы проверили алгоритм сортировки, чтобы увидеть, что это работает? Правильно ли он сортирует массив?

Если алгоритм сортировки работает правильно, то получение медианы прост. Сначала определите, имеет ли он нечетное или четное число элементов. Если у него есть нечетное число элементов, медиана - это элемент длиной/2. Если у него есть четное число элементов, медиана представляет собой среднее значение элементов длиной 2/1 и длины/2.

 Смежные вопросы

  • Нет связанных вопросов^_^