Advertisement
Guest User

Untitled

a guest
Dec 17th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.88 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template <class T>
  5. class Median{
  6. private:
  7.     T* array;
  8.     unsigned numElements;
  9. public:
  10.     Median();
  11.     unsigned size();
  12.     void empty();
  13.     void print();
  14.     void insert(T& item);
  15.  
  16.     double median();
  17. };
  18. template<class T>
  19. Median<T>::Median() {
  20.     numElements = 0;
  21.     array = new T[numElements];
  22. }
  23.  
  24. template<class T>
  25. unsigned Median<T>::size() {
  26.     return numElements;
  27. }
  28.  
  29. template<class T>
  30. void Median<T>::empty() {
  31.     if(array != NULL){
  32.         delete[] array;
  33.     }
  34.     numElements = 0;
  35.     array = new T[0];
  36. }
  37.  
  38. template<class T>
  39. void Median<T>::print() {
  40.     for(unsigned i=0; i<Median::numElements; i++){
  41.         cout<<array[i]<<" ";
  42.     }
  43. }
  44.  
  45. template<class T>
  46. void Median<T>::insert(T &item) {
  47.  
  48.     //create a copy temp array before increasing the size
  49.     T* temp = new T[numElements];
  50.     for(unsigned i=0; i<Median::numElements; i++) {
  51.         temp[i] = array[i];
  52.     }
  53.  
  54.     if(array != NULL){
  55.         delete[] array;
  56.     }
  57.     numElements++;
  58.     array = new T[numElements];
  59.  
  60.     //restore the available items
  61.     if(numElements>2) {
  62.         unsigned posToInsert = 0;
  63.         bool isFound = false;
  64.         if(item<=temp[0]){
  65.             isFound = true;
  66.         }else {
  67.             for (unsigned i = 0; i < Median::numElements - 2; i++) {
  68.                 if (temp[i] <= item && temp[i + 1] >= item) {
  69.                     posToInsert = i + 1;
  70.                     isFound = true;
  71.                 }
  72.             }
  73.         }
  74.         if(!isFound){
  75.             posToInsert=numElements-1;
  76.         }
  77.  
  78.         unsigned posNow = 0;
  79.         bool  isInserted = false;
  80.         for (unsigned i = 0; i < Median::numElements-1; i++) {
  81.             if(i!=posToInsert){
  82.                 array[posNow++] = temp[i];
  83.             }else{
  84.                 array[posNow++] = item;
  85.                 array[posNow++] = temp[i];
  86.                 isInserted = true;
  87.             }
  88.         }
  89.  
  90.         if(!isInserted){
  91.             array[posNow] = item;
  92.         }
  93.  
  94.     }else{
  95.         if(numElements==1) {
  96.             array[0] = item;
  97.         } else{
  98.             if(item<temp[0]){
  99.                 array[0] = item;
  100.                 array[1] = temp[0];
  101.             }else{
  102.                 array[0] = temp[0];
  103.                 array[1] = item;
  104.             }
  105.         }
  106.     }
  107.  
  108. }
  109.  
  110. template<class T>
  111. double Median<T>::median() {
  112.     unsigned mid = numElements/2;
  113.     if(mid%2!=0){
  114.         return array[mid];
  115.     }else{
  116.         int sum = array[mid] + array[mid-1];
  117.         return sum/2.0;
  118.     }
  119. }
  120.  
  121.  
  122.  
  123. int main() {
  124.     Median<int> median;
  125.  
  126.     unsigned numElements;
  127.     cin>>numElements;
  128.     for(unsigned i=0; i<numElements; i++){
  129.         int element;
  130.         cin>>element;
  131.         median.insert(element);
  132.     }
  133.  
  134.     cout<<"[ ";
  135.     median.print();
  136.     cout<<"] – "<<median.median()<<endl;
  137.  
  138.  
  139.     return 0;
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement