示例#1
0
        public static void DoTest()
        {
            BinaryMinHeap <long> minHeap = new BinaryMinHeap <long>(Comparer <long> .Default);

            minHeap.Add(23);
            minHeap.Add(42);
            minHeap.Add(4);
            minHeap.Add(16);
            minHeap.Add(8);
            minHeap.Add(15);
            minHeap.Add(9);
            minHeap.Add(55);
            minHeap.Add(0);
            minHeap.Add(34);
            minHeap.Add(12);
            minHeap.Add(2);
            minHeap.Add(93);
            minHeap.Add(14);
            minHeap.Add(27);

            var array = minHeap.ToArray();

            Assert.True(array.Length == minHeap.Count, "Wrong size.");

            var list = minHeap.ToList();

            Assert.True(list.Count == minHeap.Count, "Wrong size.");

            array.HeapSortDescending();
            var maxHeap = minHeap.ToMaxHeap();

            Assert.True(maxHeap.Peek() == array[0], "Wrong maximum.");
        }
		public static void DoTest ()
		{
			BinaryMinHeap<long> minHeap = new BinaryMinHeap<long> (Comparer<long>.Default);

			minHeap.Add (23);
			minHeap.Add (42);
			minHeap.Add (4);
			minHeap.Add (16);
			minHeap.Add (8);
			minHeap.Add (15);
			minHeap.Add (9);
			minHeap.Add (55);
			minHeap.Add (0);
			minHeap.Add (34);
			minHeap.Add (12);
			minHeap.Add (2);
			minHeap.Add (93);
			minHeap.Add (14);
			minHeap.Add (27);

			var array = minHeap.ToArray ();
			Debug.Assert (array.Length == minHeap.Count, "Wrong size.");

			var list = minHeap.ToList ();
			Debug.Assert (list.Count == minHeap.Count, "Wrong size.");

			array.HeapSortDescending();
			var maxHeap = minHeap.ToMaxHeap ();
			Debug.Assert (maxHeap.Peek() == array[0], "Wrong maximum.");
		}
示例#3
0
        public void ConvertingToBinaryMaxHeap()
        {
            var minHeap = new BinaryMinHeap <int>();

            int maxHeapElement = 50000;
            int minHeapElement = -50000;

            int addedElements = 0;

            //Adding every seventh number, then every fifth number,
            //every third and at last all numbers
            //NOTE: some items are added more than once
            for (int i = 7; i > 0; i -= 2)
            {
                int el = minHeapElement;
                while (el <= maxHeapElement)
                {
                    minHeap.Add(el);
                    addedElements++;
                    el += i;
                }
            }

            if (minHeap.Count != addedElements)
            {
                Assert.Fail();
            }

            // Binary min heap with reversed comparer. Have to be the same as the max heap
            var reversedMinHeap = new BinaryMinHeap <int>(Comparer <int> .Create(
                                                              (x, y) => y.CompareTo(x)));

            reversedMinHeap.Heapify(minHeap.ToArray());

            var maxHeap = minHeap.ToMaxHeap();

            if (maxHeap.Count != reversedMinHeap.Count)
            {
                Assert.Fail();
            }

            var max1 = reversedMinHeap.PeekMin();
            var max2 = maxHeap.PeekMax();

            int removedElements = 0;

            while (!reversedMinHeap.IsEmpty && !maxHeap.IsEmpty)
            {
                if (max1 < reversedMinHeap.PeekMin())
                {
                    Assert.Fail();
                }
                if (max2 < maxHeap.PeekMax())
                {
                    Assert.Fail();
                }

                max1 = reversedMinHeap.PopMin();
                max2 = maxHeap.PopMax();
                removedElements++;

                if (max1 != max2)
                {
                    Assert.Fail();
                }
            }

            Assert.IsTrue(reversedMinHeap.IsEmpty &&
                          maxHeap.IsEmpty &&
                          reversedMinHeap.Count == 0 &&
                          maxHeap.Count == 0 &&
                          addedElements == removedElements);
        }