Beispiel #1
0
        public int ExtractMin()
        {
            FindMin(out Node previous, out Node minimum);

            Node pom      = minimum.next;
            int  minValue = minimum.key;

            if (previous != null)
            {
                previous.right = minimum.right;
            }
            else
            {
                start = minimum.right;
            }

            Node i = pom, k = null;

            while (i != null)
            {
                i.parent = null;

                pom     = i.right;
                i.right = k;
                k       = i;
                i       = pom;
            }
            BinomniHeap childList = new BinomniHeap();

            childList.start = k;
            this.Union(childList);

            this.length--;
            return(minValue);
        }
Beispiel #2
0
        private int Merge(BinomniHeap newHeap)
        {
            //if (capacity < (this.length + newHeap.length)) { return -1; }
            if (newHeap == null || newHeap.start == null)
            {
                return(-1);
            }
            if (start == null)
            {
                start = newHeap.start; return(0);
            }

            Node thisCurrent = this.start, newCurrent = newHeap.start, prev = null;

            while (thisCurrent != null)
            {
                if (newCurrent == null)
                {
                    break;
                }
                // ovo se nikad ne izvršava:
                //if (thisCurrent == null) { thisCurrent = newCurrent; break; }

                if (thisCurrent.degree <= newCurrent.degree)
                {
                    prev        = thisCurrent;
                    thisCurrent = thisCurrent.right;
                    continue;
                }

                if (prev == null)
                {
                    prev       = newCurrent;
                    newCurrent = newCurrent.right;
                    prev.right = thisCurrent;
                    this.start = prev;
                    continue;
                }

                // prev, thisCurrent, newCurrent != null
                Node pom = newCurrent.right;
                newCurrent.right = prev.right;
                prev.right       = newCurrent;
                prev             = newCurrent;
                newCurrent       = pom;
                continue;
            }
            if (newCurrent != null)
            {
                prev.right = newCurrent;
            }
            return(0);
        }
Beispiel #3
0
        public int Union(BinomniHeap newHeap)
        {
            if (this.Merge(newHeap) < 0)
            {
                return(-1);
            }

            Node previous = null, current = this.start, next = current.right;

            while (next != null)
            {
                if ((current.degree != next.degree) || (next.right != null && next.right.degree == current.degree))
                {
                    previous = current;
                    current  = next;

                    next = next.right;
                    continue;
                }
                else
                {
                    if (current.key <= next.key)
                    {
                        current.right = next.right;
                        Link(next, current);

                        next = current.right;
                        continue;
                    }
                    else
                    {
                        if (previous == null)
                        {
                            start = next;
                        }
                        else
                        {
                            previous.right = next;
                        }
                        Link(current, next);
                        current = next;

                        next = next.right;
                        continue;
                    }
                }
                // GREŠKA (next.right je promenjen ako je slučaj 3):
                //next = next.right;
            }
            return(0);
        }
Beispiel #4
0
        public int Add(int newValue)
        {
            // novi Heap
            BinomniHeap newElement = new BinomniHeap();

            newElement.start = new Node(newValue);
            if (this.Union(newElement) < 0)
            {
                return(-1);
            }

            this.length++;
            return(0);
        }
Beispiel #5
0
        static void Main(string[] args)
        {
            Sort      sort      = new Sort();
            Stopwatch stopwatch = new Stopwatch();
            Random    random    = new Random();

            long vreme, ukupno, avg;
            int  brojElemenata;

            int[] niz;
            bool  provera;

            #region BinomniHeapPrviTest

            /*
             * test.RandomNiz(1000, out int[] niz, "");
             * BinomniHeap bin1000 = new BinomniHeap(niz, 1500);
             *
             * int num = 1000 / 10;
             * bool validanTest = true;
             * //10% extract:
             * int lastMin = -1;
             * int pom;
             * for (int i = 0; i < num; i++)
             * {
             *  pom = bin1000.ExtractMin();
             *  if (pom < lastMin) { validanTest = false; }
             *  lastMin = pom;
             * }
             *
             * //10% decreaseKey
             * for (int i = 0; i < num; i++)
             * {
             *  bin1000.DecreaseKey(random.Next(0, 999), random.Next(1, 10000));
             * }
             *
             * //10% delete
             * for (int i = 0; i < num; i++)
             * {
             *  bin1000.Delete(random.Next(0, 999 - num));
             * }
             *
             * //10% add
             * for (int i = 0; i < num; i++)
             * {
             *  bin1000.Add(random.Next(0, 10000));
             * }
             *
             * bool validanTest2 = true;
             * int[] provera = new int[bin1000.Length];
             * for (int i = 0; i < provera.Length; i++)
             * {
             *  if (i == 899)
             *  {
             *      //
             *  }
             *  provera[i] = bin1000.ExtractMin();
             * }
             * validanTest2 = test.Sortiran(provera, true);
             *
             * Console.WriteLine("Prva provera: " + validanTest);
             * Console.WriteLine("Druga provera: " + validanTest2);
             * Console.ReadLine();
             */
            #endregion

            #region BinomniHeap

            BinomniHeap binomniHeap;

            Console.Write("\t\t BINOMNI HEAP \r\n\r\n");

            #region BinomniHeap-10-el

            brojElemenata = 10;
            Console.WriteLine("Broj elemenata:" + brojElemenata + "\r\n");
            sort.RandomNiz(brojElemenata, out niz, "");

            stopwatch.Start();
            binomniHeap = new BinomniHeap(niz, brojElemenata);
            stopwatch.Stop();
            Console.WriteLine("Inicijalizacija strukture: " + stopwatch.ElapsedMilliseconds.ToString());
            stopwatch.Reset();

            ukupno = 0;
            for (int i = 0; i < brojElemenata / 10; i++)
            {
                stopwatch.Start();

                binomniHeap.ExtractMin();

                stopwatch.Stop();
                ukupno += stopwatch.ElapsedMilliseconds;
                stopwatch.Reset();
            }
            avg = ukupno / (brojElemenata / 10);
            Console.WriteLine("ExtractMin:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());

            ukupno = 0;
            for (int i = 0; i < brojElemenata / 10; i++)
            {
                stopwatch.Start();

                binomniHeap.DecreaseKey(random.Next(0, brojElemenata - 1), random.Next(1, 5000));

                stopwatch.Stop();
                ukupno += stopwatch.ElapsedMilliseconds;
                stopwatch.Reset();
            }
            avg = ukupno / (brojElemenata / 10);
            Console.WriteLine("DecreaseKey:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());

            ukupno = 0;
            for (int i = 0; i < brojElemenata / 10; i++)
            {
                stopwatch.Start();

                binomniHeap.Delete(random.Next(0, brojElemenata - 1));

                stopwatch.Stop();
                ukupno += stopwatch.ElapsedMilliseconds;
                stopwatch.Reset();
            }
            avg = ukupno / (brojElemenata / 10);
            Console.WriteLine("Delete:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());

            ukupno = 0;
            for (int i = 0; i < brojElemenata / 10; i++)
            {
                stopwatch.Start();

                binomniHeap.Add(random.Next(1, 10000));

                stopwatch.Stop();
                ukupno += stopwatch.ElapsedMilliseconds;
                stopwatch.Reset();
            }
            avg = ukupno / (brojElemenata / 10);
            Console.WriteLine("Add:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());

            Console.WriteLine("--------------------------");

            #endregion

            /*
             #region BinomniHeap-100-el
             *
             * brojElemenata = 100;
             * Console.WriteLine("Broj elemenata:" + brojElemenata + "\r\n");
             * sort.RandomNiz(brojElemenata, out niz, "");
             *
             * stopwatch.Start();
             * binomniHeap = new BinomniHeap(niz, brojElemenata);
             * stopwatch.Stop();
             * Console.WriteLine("Inicijalizacija strukture: " + stopwatch.ElapsedMilliseconds.ToString());
             * stopwatch.Reset();
             *
             * ukupno = 0;
             * for (int i = 0; i < brojElemenata / 10; i++)
             * {
             *  stopwatch.Start();
             *
             *  binomniHeap.ExtractMin();
             *
             *  stopwatch.Stop();
             *  ukupno += stopwatch.ElapsedMilliseconds;
             *  stopwatch.Reset();
             * }
             * avg = ukupno / (brojElemenata / 10);
             * Console.WriteLine("ExtractMin:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());
             *
             * ukupno = 0;
             * for (int i = 0; i < brojElemenata / 10; i++)
             * {
             *  stopwatch.Start();
             *
             *  binomniHeap.DecreaseKey(random.Next(0, brojElemenata - 1), random.Next(1, 5000));
             *
             *  stopwatch.Stop();
             *  ukupno += stopwatch.ElapsedMilliseconds;
             *  stopwatch.Reset();
             * }
             * avg = ukupno / (brojElemenata / 10);
             * Console.WriteLine("DecreaseKey:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());
             *
             * ukupno = 0;
             * for (int i = 0; i < brojElemenata / 10; i++)
             * {
             *  stopwatch.Start();
             *
             *  binomniHeap.Delete(random.Next(0, brojElemenata - 1));
             *
             *  stopwatch.Stop();
             *  ukupno += stopwatch.ElapsedMilliseconds;
             *  stopwatch.Reset();
             * }
             * avg = ukupno / (brojElemenata / 10);
             * Console.WriteLine("Delete:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());
             *
             * ukupno = 0;
             * for (int i = 0; i < brojElemenata / 10; i++)
             * {
             *  stopwatch.Start();
             *
             *  binomniHeap.Add(random.Next(1, 10000));
             *
             *  stopwatch.Stop();
             *  ukupno += stopwatch.ElapsedMilliseconds;
             *  stopwatch.Reset();
             * }
             * avg = ukupno / (brojElemenata / 10);
             * Console.WriteLine("Add:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());
             *
             * Console.WriteLine("--------------------------");
             *
             #endregion
             *
             #region BinomniHeap-1K-el
             *
             * brojElemenata = 1000;
             * Console.WriteLine("Broj elemenata:" + brojElemenata + "\r\n");
             * sort.RandomNiz(brojElemenata, out niz, "");
             *
             * stopwatch.Start();
             * binomniHeap = new BinomniHeap(niz, brojElemenata);
             * stopwatch.Stop();
             * Console.WriteLine("Inicijalizacija strukture: " + stopwatch.ElapsedMilliseconds.ToString());
             * stopwatch.Reset();
             *
             * ukupno = 0;
             * for (int i = 0; i < brojElemenata / 10; i++)
             * {
             *  stopwatch.Start();
             *
             *  binomniHeap.ExtractMin();
             *
             *  stopwatch.Stop();
             *  ukupno += stopwatch.ElapsedMilliseconds;
             *  stopwatch.Reset();
             * }
             * avg = ukupno / (brojElemenata / 10);
             * Console.WriteLine("ExtractMin:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());
             *
             * ukupno = 0;
             * for (int i = 0; i < brojElemenata / 10; i++)
             * {
             *  stopwatch.Start();
             *
             *  binomniHeap.DecreaseKey(random.Next(0, brojElemenata - 1), random.Next(1, 5000));
             *
             *  stopwatch.Stop();
             *  ukupno += stopwatch.ElapsedMilliseconds;
             *  stopwatch.Reset();
             * }
             * avg = ukupno / (brojElemenata / 10);
             * Console.WriteLine("DecreaseKey:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());
             *
             * ukupno = 0;
             * for (int i = 0; i < brojElemenata / 10; i++)
             * {
             *  stopwatch.Start();
             *
             *  binomniHeap.Delete(random.Next(0, brojElemenata - 1));
             *
             *  stopwatch.Stop();
             *  ukupno += stopwatch.ElapsedMilliseconds;
             *  stopwatch.Reset();
             * }
             * avg = ukupno / (brojElemenata / 10);
             * Console.WriteLine("Delete:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());
             *
             * ukupno = 0;
             * for (int i = 0; i < brojElemenata / 10; i++)
             * {
             *  stopwatch.Start();
             *
             *  binomniHeap.Add(random.Next(1, 10000));
             *
             *  stopwatch.Stop();
             *  ukupno += stopwatch.ElapsedMilliseconds;
             *  stopwatch.Reset();
             * }
             * avg = ukupno / (brojElemenata / 10);
             * Console.WriteLine("Add:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());
             *
             * Console.WriteLine("--------------------------");
             *
             #endregion
             *
             #region BinomniHeap-10K-el
             *
             * brojElemenata = 10000;
             * Console.WriteLine("Broj elemenata:" + brojElemenata + "\r\n");
             * sort.RandomNiz(brojElemenata, out niz, "");
             *
             * stopwatch.Start();
             * binomniHeap = new BinomniHeap(niz, brojElemenata);
             * stopwatch.Stop();
             * Console.WriteLine("Inicijalizacija strukture: " + stopwatch.ElapsedMilliseconds.ToString());
             * stopwatch.Reset();
             *
             * ukupno = 0;
             * for (int i = 0; i < brojElemenata / 10; i++)
             * {
             *  stopwatch.Start();
             *
             *  binomniHeap.ExtractMin();
             *
             *  stopwatch.Stop();
             *  ukupno += stopwatch.ElapsedMilliseconds;
             *  stopwatch.Reset();
             * }
             * avg = ukupno / (brojElemenata / 10);
             * Console.WriteLine("ExtractMin:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());
             *
             * ukupno = 0;
             * for (int i = 0; i < brojElemenata / 10; i++)
             * {
             *  stopwatch.Start();
             *
             *  binomniHeap.DecreaseKey(random.Next(0, brojElemenata - 1), random.Next(1, 5000));
             *
             *  stopwatch.Stop();
             *  ukupno += stopwatch.ElapsedMilliseconds;
             *  stopwatch.Reset();
             * }
             * avg = ukupno / (brojElemenata / 10);
             * Console.WriteLine("DecreaseKey:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());
             *
             * ukupno = 0;
             * for (int i = 0; i < brojElemenata / 10; i++)
             * {
             *  stopwatch.Start();
             *
             *  binomniHeap.Delete(random.Next(0, brojElemenata - 1));
             *
             *  stopwatch.Stop();
             *  ukupno += stopwatch.ElapsedMilliseconds;
             *  stopwatch.Reset();
             * }
             * avg = ukupno / (brojElemenata / 10);
             * Console.WriteLine("Delete:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());
             *
             * ukupno = 0;
             * for (int i = 0; i < brojElemenata / 10; i++)
             * {
             *  stopwatch.Start();
             *
             *  binomniHeap.Add(random.Next(1, 10000));
             *
             *  stopwatch.Stop();
             *  ukupno += stopwatch.ElapsedMilliseconds;
             *  stopwatch.Reset();
             * }
             * avg = ukupno / (brojElemenata / 10);
             * Console.WriteLine("Add:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());
             *
             * Console.WriteLine("--------------------------");
             *
             #endregion
             *
             #region BinomniHeap-100K-el
             *
             * brojElemenata = 100000;
             * Console.WriteLine("Broj elemenata:" + brojElemenata + "\r\n");
             * sort.RandomNiz(brojElemenata, out niz, "");
             *
             * stopwatch.Start();
             * binomniHeap = new BinomniHeap(niz, brojElemenata);
             * stopwatch.Stop();
             * Console.WriteLine("Inicijalizacija strukture: " + stopwatch.ElapsedMilliseconds.ToString());
             * stopwatch.Reset();
             *
             * ukupno = 0;
             * for (int i = 0; i < brojElemenata / 10; i++)
             * {
             *  stopwatch.Start();
             *
             *  binomniHeap.ExtractMin();
             *
             *  stopwatch.Stop();
             *  ukupno += stopwatch.ElapsedMilliseconds;
             *  stopwatch.Reset();
             * }
             * avg = ukupno / (brojElemenata / 10);
             * Console.WriteLine("ExtractMin:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());
             *
             * ukupno = 0;
             * for (int i = 0; i < brojElemenata / 10; i++)
             * {
             *  stopwatch.Start();
             *
             *  binomniHeap.DecreaseKey(random.Next(0, brojElemenata - 1), random.Next(1, 5000));
             *
             *  stopwatch.Stop();
             *  ukupno += stopwatch.ElapsedMilliseconds;
             *  stopwatch.Reset();
             * }
             * avg = ukupno / (brojElemenata / 10);
             * Console.WriteLine("DecreaseKey:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());
             *
             * ukupno = 0;
             * for (int i = 0; i < brojElemenata / 10; i++)
             * {
             *  stopwatch.Start();
             *
             *  binomniHeap.Delete(random.Next(0, brojElemenata - 1));
             *
             *  stopwatch.Stop();
             *  ukupno += stopwatch.ElapsedMilliseconds;
             *  stopwatch.Reset();
             * }
             * avg = ukupno / (brojElemenata / 10);
             * Console.WriteLine("Delete:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());
             *
             * ukupno = 0;
             * for (int i = 0; i < brojElemenata / 10; i++)
             * {
             *  stopwatch.Start();
             *
             *  binomniHeap.Add(random.Next(1, 10000));
             *
             *  stopwatch.Stop();
             *  ukupno += stopwatch.ElapsedMilliseconds;
             *  stopwatch.Reset();
             * }
             * avg = ukupno / (brojElemenata / 10);
             * Console.WriteLine("Add:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());
             *
             * Console.WriteLine("--------------------------");
             *
             #endregion
             *
             * Console.WriteLine("**********************************");
             */
            #endregion

            #region BinarniHeap

            BinarniHeap binarniHeap;

            Console.Write("\t\t BINARNI HEAP \r\n\r\n");

            #region BinarniHeap-10-el

            brojElemenata = 10;
            Console.WriteLine("Broj elemenata:" + brojElemenata + "\r\n");
            sort.RandomNiz(brojElemenata, out niz, "");

            stopwatch.Start();
            binarniHeap = new BinarniHeap(niz, brojElemenata);
            stopwatch.Stop();
            Console.WriteLine("Inicijalizacija strukture: " + stopwatch.ElapsedMilliseconds.ToString());
            stopwatch.Reset();

            ukupno = 0;
            for (int i = 0; i < brojElemenata / 10; i++)
            {
                stopwatch.Start();

                binarniHeap.ExtractMin();

                stopwatch.Stop();
                ukupno += stopwatch.ElapsedMilliseconds;
                stopwatch.Reset();
            }
            avg = ukupno / (brojElemenata / 10);
            Console.WriteLine("ExtractMin:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());

            ukupno = 0;
            for (int i = 0; i < brojElemenata / 10; i++)
            {
                stopwatch.Start();

                binarniHeap.DecreaseKey(random.Next(0, brojElemenata - 1), random.Next(1, 5000));

                stopwatch.Stop();
                ukupno += stopwatch.ElapsedMilliseconds;
                stopwatch.Reset();
            }
            avg = ukupno / (brojElemenata / 10);
            Console.WriteLine("DecreaseKey:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());

            ukupno = 0;
            for (int i = 0; i < brojElemenata / 10; i++)
            {
                stopwatch.Start();

                binarniHeap.Delete(random.Next(0, brojElemenata - 1));

                stopwatch.Stop();
                ukupno += stopwatch.ElapsedMilliseconds;
                stopwatch.Reset();
            }
            avg = ukupno / (brojElemenata / 10);
            Console.WriteLine("Delete:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());

            ukupno = 0;
            for (int i = 0; i < brojElemenata / 10; i++)
            {
                stopwatch.Start();

                binarniHeap.Add(random.Next(1, 10000));

                stopwatch.Stop();
                ukupno += stopwatch.ElapsedMilliseconds;
                stopwatch.Reset();
            }
            avg = ukupno / (brojElemenata / 10);
            Console.WriteLine("Add:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());

            Console.WriteLine("--------------------------");

            #endregion

            #region BinarniHeap-100-el

            brojElemenata = 100;
            Console.WriteLine("Broj elemenata:" + brojElemenata + "\r\n");
            sort.RandomNiz(brojElemenata, out niz, "");

            stopwatch.Start();
            binarniHeap = new BinarniHeap(niz, brojElemenata);
            stopwatch.Stop();
            Console.WriteLine("Inicijalizacija strukture: " + stopwatch.ElapsedMilliseconds.ToString());
            stopwatch.Reset();

            ukupno = 0;
            for (int i = 0; i < brojElemenata / 10; i++)
            {
                stopwatch.Start();

                binarniHeap.ExtractMin();

                stopwatch.Stop();
                ukupno += stopwatch.ElapsedMilliseconds;
                stopwatch.Reset();
            }
            avg = ukupno / (brojElemenata / 10);
            Console.WriteLine("ExtractMin:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());

            ukupno = 0;
            for (int i = 0; i < brojElemenata / 10; i++)
            {
                stopwatch.Start();

                binarniHeap.DecreaseKey(random.Next(0, brojElemenata - 1), random.Next(1, 5000));

                stopwatch.Stop();
                ukupno += stopwatch.ElapsedMilliseconds;
                stopwatch.Reset();
            }
            avg = ukupno / (brojElemenata / 10);
            Console.WriteLine("DecreaseKey:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());

            ukupno = 0;
            for (int i = 0; i < brojElemenata / 10; i++)
            {
                stopwatch.Start();

                binarniHeap.Delete(random.Next(0, brojElemenata - 1));

                stopwatch.Stop();
                ukupno += stopwatch.ElapsedMilliseconds;
                stopwatch.Reset();
            }
            avg = ukupno / (brojElemenata / 10);
            Console.WriteLine("Delete:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());

            ukupno = 0;
            for (int i = 0; i < brojElemenata / 10; i++)
            {
                stopwatch.Start();

                binarniHeap.Add(random.Next(1, 10000));

                stopwatch.Stop();
                ukupno += stopwatch.ElapsedMilliseconds;
                stopwatch.Reset();
            }
            avg = ukupno / (brojElemenata / 10);
            Console.WriteLine("Add:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());

            Console.WriteLine("--------------------------");

            #endregion

            #region BinarniHeap-1K-el

            brojElemenata = 1000;
            Console.WriteLine("Broj elemenata:" + brojElemenata + "\r\n");
            sort.RandomNiz(brojElemenata, out niz, "");

            stopwatch.Start();
            binarniHeap = new BinarniHeap(niz, brojElemenata);
            stopwatch.Stop();
            Console.WriteLine("Inicijalizacija strukture: " + stopwatch.ElapsedMilliseconds.ToString());
            stopwatch.Reset();

            ukupno = 0;
            for (int i = 0; i < brojElemenata / 10; i++)
            {
                stopwatch.Start();

                binarniHeap.ExtractMin();

                stopwatch.Stop();
                ukupno += stopwatch.ElapsedMilliseconds;
                stopwatch.Reset();
            }
            avg = ukupno / (brojElemenata / 10);
            Console.WriteLine("ExtractMin:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());

            ukupno = 0;
            for (int i = 0; i < brojElemenata / 10; i++)
            {
                stopwatch.Start();

                binarniHeap.DecreaseKey(random.Next(0, brojElemenata - 1), random.Next(1, 5000));

                stopwatch.Stop();
                ukupno += stopwatch.ElapsedMilliseconds;
                stopwatch.Reset();
            }
            avg = ukupno / (brojElemenata / 10);
            Console.WriteLine("DecreaseKey:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());

            ukupno = 0;
            for (int i = 0; i < brojElemenata / 10; i++)
            {
                stopwatch.Start();

                binarniHeap.Delete(random.Next(0, brojElemenata - 1));

                stopwatch.Stop();
                ukupno += stopwatch.ElapsedMilliseconds;
                stopwatch.Reset();
            }
            avg = ukupno / (brojElemenata / 10);
            Console.WriteLine("Delete:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());

            ukupno = 0;
            for (int i = 0; i < brojElemenata / 10; i++)
            {
                stopwatch.Start();

                binarniHeap.Add(random.Next(1, 10000));

                stopwatch.Stop();
                ukupno += stopwatch.ElapsedMilliseconds;
                stopwatch.Reset();
            }
            avg = ukupno / (brojElemenata / 10);
            Console.WriteLine("Add:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());

            Console.WriteLine("--------------------------");

            #endregion

            #region BinarniHeap-10K-el

            brojElemenata = 10000;
            Console.WriteLine("Broj elemenata:" + brojElemenata + "\r\n");
            sort.RandomNiz(brojElemenata, out niz, "");

            stopwatch.Start();
            binarniHeap = new BinarniHeap(niz, brojElemenata);
            stopwatch.Stop();
            Console.WriteLine("Inicijalizacija strukture: " + stopwatch.ElapsedMilliseconds.ToString());
            stopwatch.Reset();

            ukupno = 0;
            for (int i = 0; i < brojElemenata / 10; i++)
            {
                stopwatch.Start();

                binarniHeap.ExtractMin();

                stopwatch.Stop();
                ukupno += stopwatch.ElapsedMilliseconds;
                stopwatch.Reset();
            }
            avg = ukupno / (brojElemenata / 10);
            Console.WriteLine("ExtractMin:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());

            ukupno = 0;
            for (int i = 0; i < brojElemenata / 10; i++)
            {
                stopwatch.Start();

                binarniHeap.DecreaseKey(random.Next(0, brojElemenata - 1), random.Next(1, 5000));

                stopwatch.Stop();
                ukupno += stopwatch.ElapsedMilliseconds;
                stopwatch.Reset();
            }
            avg = ukupno / (brojElemenata / 10);
            Console.WriteLine("DecreaseKey:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());

            ukupno = 0;
            for (int i = 0; i < brojElemenata / 10; i++)
            {
                stopwatch.Start();

                binarniHeap.Delete(random.Next(0, brojElemenata - 1));

                stopwatch.Stop();
                ukupno += stopwatch.ElapsedMilliseconds;
                stopwatch.Reset();
            }
            avg = ukupno / (brojElemenata / 10);
            Console.WriteLine("Delete:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());

            ukupno = 0;
            for (int i = 0; i < brojElemenata / 10; i++)
            {
                stopwatch.Start();

                binarniHeap.Add(random.Next(1, 10000));

                stopwatch.Stop();
                ukupno += stopwatch.ElapsedMilliseconds;
                stopwatch.Reset();
            }
            avg = ukupno / (brojElemenata / 10);
            Console.WriteLine("Add:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());

            Console.WriteLine("--------------------------");

            #endregion

            #region BinarniHeap-100K-el

            brojElemenata = 100000;
            Console.WriteLine("Broj elemenata:" + brojElemenata + "\r\n");
            sort.RandomNiz(brojElemenata, out niz, "");

            stopwatch.Start();
            binarniHeap = new BinarniHeap(niz, brojElemenata);
            stopwatch.Stop();
            Console.WriteLine("Inicijalizacija strukture: " + stopwatch.ElapsedMilliseconds.ToString());
            stopwatch.Reset();

            ukupno = 0;
            for (int i = 0; i < brojElemenata / 10; i++)
            {
                stopwatch.Start();

                binarniHeap.ExtractMin();

                stopwatch.Stop();
                ukupno += stopwatch.ElapsedMilliseconds;
                stopwatch.Reset();
            }
            avg = ukupno / (brojElemenata / 10);
            Console.WriteLine("ExtractMin:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());

            ukupno = 0;
            for (int i = 0; i < brojElemenata / 10; i++)
            {
                stopwatch.Start();

                binarniHeap.DecreaseKey(random.Next(0, brojElemenata - 1), random.Next(1, 5000));

                stopwatch.Stop();
                ukupno += stopwatch.ElapsedMilliseconds;
                stopwatch.Reset();
            }
            avg = ukupno / (brojElemenata / 10);
            Console.WriteLine("DecreaseKey:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());

            ukupno = 0;
            for (int i = 0; i < brojElemenata / 10; i++)
            {
                stopwatch.Start();

                binarniHeap.Delete(random.Next(0, brojElemenata - 1));

                stopwatch.Stop();
                ukupno += stopwatch.ElapsedMilliseconds;
                stopwatch.Reset();
            }
            avg = ukupno / (brojElemenata / 10);
            Console.WriteLine("Delete:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());

            ukupno = 0;
            for (int i = 0; i < brojElemenata / 10; i++)
            {
                stopwatch.Start();

                binarniHeap.Add(random.Next(1, 10000));

                stopwatch.Stop();
                ukupno += stopwatch.ElapsedMilliseconds;
                stopwatch.Reset();
            }
            avg = ukupno / (brojElemenata / 10);
            Console.WriteLine("Add:\r\nProsečno vreme: " + avg.ToString() + "\t Ukupno vreme: " + ukupno.ToString());

            Console.WriteLine("--------------------------");

            #endregion

            Console.WriteLine("**********************************");

            #endregion

            #region Provera

            Console.WriteLine("\t\t TEST \r\n");

            provera = true;
            //int[] testBinomni = new int[binomniHeap.Length];
            int[] testBinarni = new int[binarniHeap.Length];

            {
                /*for (int i = 0; i < testBinomni.Length; i++)
                 * {
                 *  testBinomni[i] = binomniHeap.ExtractMin();
                 * }*/
                for (int i = 0; i < testBinarni.Length; i++)
                {
                    testBinarni[i] = binarniHeap.ExtractMin();
                }
                //provera = sort.Sortiran(testBinomni, true);
                //Console.WriteLine("Binomni heap: " + provera);
                provera = sort.Sortiran(testBinarni, true);
                Console.WriteLine("Binarni heap: " + provera);
            }
            #endregion

            Console.ReadLine();
        }