Beispiel #1
0
        public int GetRunningMedian(int number)
        {
            int difference = MinHeap.Size() - MaxHeap.Size();

            switch (difference)
            {
            case 0:
                if (number < Median)
                {
                    MinHeap.Insert(number);
                    Median = MinHeap.GetTop();
                }
                else
                {
                    MaxHeap.Insert(number);
                    Median = MaxHeap.GetTop();
                }
                break;

            case 1:
                if (number < Median)
                {
                    MaxHeap.Insert(MinHeap.ExtractTopElement());
                    MinHeap.Insert(number);
                }
                else
                {
                    MinHeap.Insert(MaxHeap.ExtractTopElement());
                    MaxHeap.Insert(number);
                }
                Median = (MinHeap.GetTop() + MaxHeap.GetTop()) / 2;
                break;

            case -1:
                if (number < Median)
                {
                    MinHeap.Insert(MaxHeap.ExtractTopElement());
                }
                else
                {
                    MinHeap.Insert(MaxHeap.ExtractTopElement());
                    MaxHeap.Insert(number);
                }
                Median = (MinHeap.GetTop() + MaxHeap.GetTop()) / 2;
                break;
            }
            return(Median);
        }
Beispiel #2
0
 public MaxMinHeapHolder(int capacity)
 {
     MaxHeap = new MaxHeap(capacity);
     MinHeap = new MinHeap(capacity);
 }