2010-10-30 50 views
3

我在C#檢查堆排序算法的時候,我的問題是,我知道我必須使用System.Timers,因爲我不知道如何測量算法的時間。 我要檢查算法時間表中包含1000萬,100萬和1000整數000。C#heapSort,System.Timers;檢查算法的時間

幫助我的好心人請。

這是代碼:


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

我和你幫忙寫這個,確實是好?

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; 
      } 
      else 
      { 
       j = m + 1; 
      } 
     } 

     list[i] = Temp; 
    } 





    public static void HeapSort (int[] list) 

{ INT I; //博爾丁爲(I =(list.Length - 1)/ 2; I> = 0;我 - )堆 調整(列表,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(); 




    } 


    } 
} 

+1

我們理解你的困惑,聽起來像是'System.Timers'將是一件好事,但事實證明最好的.NET計時器對象的其他地方找到。下一次,當你實際上只是猜測時,不要說「我知道」。 – 2010-10-30 20:44:51

+0

你的代碼看起來不錯;這應該是有效的。 – 2010-10-30 21:38:07

回答

6

如果你正在尋找的時間測量,使用Stopwatch類。

這使您可以使用Start()Stop()方法很容易地測量一段時間。然後Elapsed屬性會告訴你操作花了多長時間。

4

您可以使用Stopwatch類測量時間:

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