C#heapSort,System.Timers;检查算法时间

时间:2010-10-30 20:39:47

标签: c# timer heapsort

我必须在C#中检查HeapSort算法时间,我的问题是我知道我必须使用System.Timers,因为我不知道如何测量算法时间。 我必须检查表的算法时间,包含1000,10 000,100 000和1000 000个整数。

请帮助我好人。

这是代码:


    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();
        }
    }
}

我和你一起写这个帮助,确实很好吗?

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();
        }
    }
}

3 个答案:

答案 0 :(得分:6)

如果您正在寻找时间测量,请使用Stopwatch课程。

这使您可以使用Start()Stop()方法轻松测量一些时间。然后,Elapsed属性将告诉您操作需要多长时间。

答案 1 :(得分:4)

您可以使用Stopwatch课程来衡量时间:

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

答案 2 :(得分:0)

Vance Morrison的博客中有一些代码使用了秒表类(如上所述),但会进行多次运行并执行一些统计分析,以便为您提供平均值,中值运行时间以及标准派生值。

在这里查看: http://blogs.msdn.com/b/vancem/archive/2006/09/21/765648.aspx