Esempio n. 1
0
        public void Delete_EntireArray()
        {
            int[] data = { 5, 2, 6, 3, 1, 4 };
            int[] expected = { 1, 2, 3, 4, 5, 6 };
            IBinarySearchTree<int> tree = new BinarySearchTree<int>();

            foreach (int value in data)
                tree.Insert(value);

            int[] actualArray = tree.ToArray();
            CollectionAssert.AreEqual(expected, actualArray);
            Assert.AreEqual(expected.Length, tree.Size);
            Assert.IsTrue(tree.Delete(1));
            Assert.IsFalse(tree.Find(1));
            Assert.IsTrue(tree.Delete(2));
            Assert.IsFalse(tree.Find(2));
            Assert.IsTrue(tree.Delete(3));
            Assert.IsFalse(tree.Find(3));
            Assert.IsTrue(tree.Delete(4));
            Assert.IsFalse(tree.Find(4));
            Assert.IsTrue(tree.Delete(5));
            Assert.IsFalse(tree.Find(5));
            Assert.IsTrue(tree.Delete(6));
            Assert.IsFalse(tree.Find(6));
            Assert.AreEqual(0, tree.Size);
        }
Esempio n. 2
0
        public void Delete_Unsorted_Check()
        {
            int[] data = { 5, 2, 6, 3, 1, 4 };
            int[] expected_sorted = { 1, 2, 3, 4, 5, 6 };
            int[] expected_delete3 = { 1, 2, 4, 5, 6 };
            int[] expected_delete2 = { 1, 4, 5, 6 };
            int[] expected_delete6 = { 1, 4, 5 };
            int[] expected_delete1 = { 4, 5 };

            IBinarySearchTree<int> tree = new BinarySearchTree<int>();

            foreach (int value in data)
                tree.Insert(value);

            int[] actualArray = tree.ToArray();

            CollectionAssert.AreEqual(expected_sorted, actualArray);

            Assert.IsTrue(tree.Delete(3));
            CollectionAssert.AreEqual(expected_delete3, tree.ToArray());

            Assert.IsTrue(tree.Delete(2));
            CollectionAssert.AreEqual(expected_delete2, tree.ToArray());

            Assert.IsTrue(tree.Delete(6));
            CollectionAssert.AreEqual(expected_delete6, tree.ToArray());

            Assert.IsTrue(tree.Delete(1));
            CollectionAssert.AreEqual(expected_delete1, tree.ToArray());
        }
Esempio n. 3
0
        public void Insert_SortedArray()
        {
            int[] data = {1, 2, 3, 4, 5, 6};
            int[] expected = {1, 2, 3, 4, 5, 6};
            IBinarySearchTree<int> tree = new BinarySearchTree<int>();

            foreach (int value in data)
            {
                tree.Insert(value);
            }

            int[] actual = tree.ToArray();
            CollectionAssert.AreEqual(expected, actual);
        }
Esempio n. 4
0
        public void Insert_SmallUnsortedArray()
        {
            int[] data = new[] {5, 2, 6, 3, 1, 4};
            int[] expected = {1, 2, 3, 4, 5, 6};
            IBinarySearchTree<int> tree = new BinarySearchTree<int>();

            foreach (int value in data)
                tree.Insert(value);

            int[] actualArray = tree.ToArray();
            CollectionAssert.AreEqual(expected, actualArray);
        }
Esempio n. 5
0
        public void Insert_OneValue_ToArray()
        {
            IBinarySearchTree<int> tree = new BinarySearchTree<int>();
            tree.Insert(1);
            int[] sortedArray = tree.ToArray();

            Assert.IsTrue(tree.Find(1));
            Assert.AreEqual(1, sortedArray.Length);
            Assert.AreEqual(1, sortedArray[0]);
        }
Esempio n. 6
0
        static void Main(string[] args)
        {
            const int seed = 0;

            int[] sizes =
            {
                1000,
                10000,
                100000,
                1000000
            };

            foreach (var count in sizes)
            {
                Random randNum = new Random(seed);
                int[] random = Enumerable
                    .Repeat(0, count)
                    .Select(i => randNum.Next(0, int.MaxValue))
                    .ToArray();

                int[] randomCopy = new int[random.Length];
                random.CopyTo(randomCopy, 0);
                int[] randomHeapCopy = new int[random.Length];
                random.CopyTo(randomHeapCopy, 0);

                int[] sorted = random.OrderBy(s => s).ToArray();
                TimeSpan orderByTime = MeasureSort(s => s.OrderBy(t => t).ToArray(), random, sorted);
                TimeSpan sortTime = MeasureSort(s =>
                                                {
                                                    Array.Sort(s);
                                                    return s;
                                                }, randomCopy, sorted);
                TimeSpan heapTime = MeasureSort(Heap.HeapSort, random, sorted.Reverse().ToArray());
                TimeSpan inplaceHeapTime = MeasureSort(Heap.InplaceHeapSort, randomHeapCopy, sorted.Reverse().ToArray());
                TimeSpan bstTime = MeasureSort(s =>
                {
                    BinarySearchTree<int> tree = new BinarySearchTree<int>();

                    foreach (int val in s)
                    {
                        tree.Insert(val);
                    }

                    return tree.ToArray();
                }, random, sorted);
                TimeSpan avlTime = MeasureSort(s =>
                {
                    AvlTree<int> tree = new AvlTree<int>();

                    foreach (int val in s)
                        tree.Insert(val);

                    return tree.ToArray();
                }, random, sorted);

                Console.WriteLine("----- {0} -----", count);
                Console.WriteLine("Heap:               {0}", heapTime.TotalSeconds);
                Console.WriteLine("Inplace Heap:       {0}", inplaceHeapTime.TotalSeconds);
                Console.WriteLine("Binary search tree: {0}", bstTime.TotalSeconds);
                Console.WriteLine("AVL tree:           {0}", avlTime.TotalSeconds);
                Console.WriteLine("Sort:               {0}", sortTime.TotalSeconds);
                Console.WriteLine("OrderBy:            {0}", orderByTime.TotalSeconds);
            }

            Console.ReadLine();
        }