开发者

C# heapSort ,System.Timers; to check algorithm time

I have to check HeapSort algorithm time in C# , my problem is that I Know I must use System.Timers , because I don't know how to measures the algorithm time. I have to check the algorithm time for table contains 1000 ,10 000 , 100 000 and 1000 000 integers.

Help me good people please.

This is the code:


    using System;

namespace Sort
{
    class Program
    {
        public static void Adjust(int[] list, int i, int m)
        {
            int Temp = list[i];
            int j = i * 2 + 1;

            while (j <= m)
            {
                if (j < m)
                    if (list[j] < list[j + 1])
                        j = j + 1;
                if (Temp < list[j])
                {
                    list[i] = list[j];
                    i = j;
                    j = 2 * i + 1;
                }
                else
                {
                    j = m + 1;
                }
            }

            list[i] = Temp;
        }

        public static void HeapSort(int[] list)
        {
            int i;
            //Boulding a heap
            for (i = (list.Length - 1) / 2; i >= 0; i--)
                Adjust(list, i, list.Length - 1);

            for (i = list.Length - 1; i >= 1; i--)
            {
                int Temp = list[0];
                list[0] = list[i];
                list[i] = Temp;
                Adjust(list, 0, i - 1);
            }
        }

        static void Main(string[] args)
        {
            Console.Title = "HeapSort";
            int i;
            int[] a = { 12, 3, -12, 27, 34, 23, 1, 81, 45,
                    17, 9, 23, 11, 4, 121 };
            Console.WriteLine("Data before sort ");
            for (i = 0; i < a.Length; i++)
                Console.Write(" {0} ", a[i]);
            Console.WriteLine();
            HeapSort(a);
            Console.WriteLine("Data after sort");
            for (i = 0; i < a.Length; i++)
                Console.Write(" {0} ", a[i]);
            Console.ReadLine();
        }
    }
}

I've write this with You help , does is good ?

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics;

namespace Sort { class Program {

    public static void Adjust(int[] list, int i, int m)
    {
        int Temp = list[i];
        int j = i * 2 + 1;

        while (j <= m)
        {

            if (j < m)
                if (list[j] < list[j + 1])
                    j = j + 1;


            if (Temp < list[j])
            {
                list[i] = list[j];
                i = j;
                j = 2 * i + 1;
            }
           开发者_C百科 else
            {
                j = m + 1;
            }
        }

        list[i] = Temp;
    }





    public static void HeapSort (int[] list)

{ int i; //Boulding a heap for (i = (list.Length - 1) / 2;i >=0;i--) Adjust (list, i, list.Length - 1);

for ( i = list.Length - 1; i >= 1; i--)
{
    int Temp = list [0];
    list [0] = list [i];
    list [i] = Temp;
    Adjust (list, 0, i - 1);
}

}

    static void Main(string[] args)
    {
        Console.Title = "HeapSort";
        int i;
        Random myRandom = new Random();//Creating instance of class Random
        Stopwatch myTime = new Stopwatch(); //variable for time measurement




        int[] a = new int[1000]; //table contents 1000 variables


        for (i = 0; i < a.Length; i++)
            a[i] = myRandom.Next(100);

        Console.WriteLine("Data before sort ");
        for (i = 0; i < a.Length; i++)
            Console.Write(" {0} ", a[i]);
        Console.WriteLine();
        myTime.Start();
        HeapSort(a);
        myTime.Stop();

        string TimeEl = myTime.Elapsed.ToString();

        Console.WriteLine("Data after sort");
        for (i = 0; i < a.Length; i++)
            Console.Write(" {0} ", a[i]);
        Console.WriteLine();
        Console.WriteLine();
        Console.WriteLine("time elapsed: {0} ", TimeEl);
        Console.ReadLine();




    }


    }
}


If you're looking for time measurements, use the Stopwatch class.

This allows you to easily measure some time using the Start() and Stop() method. The Elapsed property will then tell you how long the operation took.


You could use the Stopwatch class to measure time:

var watch = Stopwatch.StartNew();
SomeFunctionThatCallsYourAlgorithm();
watch.Stop();
Console.WriteLine("algorithm execution time: {0}ms", watch.ElapsedMilliseconds);


There's some code from Vance Morrison's weblog that uses the Stopwatch class (as described above), but does multiple runs and performs some statistical analysis to give you the mean, median runtime, along with the standard derivation.

Check it out here: Link

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜