2016-09-04 11 views
0

私のコードのために取られた時間はこれで表示されていない理由を私は理解することはできません。私のバブルソートは、これまでの二番目の配列

class Program 
{ 

    static void Main(string[] args) 
    { 

     Random r = new Random(); 
     int n = r.Next(1, 10000); 


     int[] FortyKSet; 
     FortyKSet = new int[400]; 

     for (int ndex = 0; ndex < FortyKSet.Length; ndex++) 
     { 
      FortyKSet[ndex] = r.Next(1, 80000); 
     } 


     int[] TenKSet; 
     TenKSet = new int[100];//populates the array with 100 integers 

     for (int index = 0; index < TenKSet.Length; index++) 
     { 
      TenKSet[index] = r.Next(1, 20000);//makes the 10,000 integers random 
     } 

     bubbleSort(TenKSet); 
     foreach (int i in TenKSet) 
     { 
      Console.Write(i + ","); 
     } 

     bubbleSort(FortyKSet); 
     foreach (int z in FortyKSet) 
     { 
      Console.Write(z + ","); 
     } 

     for (int space = 0; space < 2; space++) 
     { 
      Console.WriteLine(""); 
     } 
    } 

    public static void swap(int[] array, int first, int second) 
    { 
     int temp = array[first]; 
     array[first] = array[second]; 
     array[second] = temp; 
    } 
    public static void bubbleSort(int[] array) 
    { 
     int start = 0; 
     bool swapMade = true; 

     while (start < array.Length - 1 && swapMade == true) 
     { 
      swapMade = false; 
      start++; 

      for (int first = 0; first < array.Length - start; first ++) 
      { 
       if(array[first] > array[first+1]) 
       { 
        swap(array, first, first + 1); 
        swapMade = true; 
       } 
      } 

     } 
     DateTime begin = DateTime.Now; 
     TimeSpan time; 
     time = DateTime.Now.Subtract(begin); 

     Console.WriteLine("Time for bubblesort to complete: " + time.ToString(@"mm\:ss\.ffffff")); 

    } 
} 

私はプログラムを実行すると、それは(私に2つのソート配列を与えます)TenKSet配列の上にはソートを完了するのにかかる時間がありますが、FortyKSetを実行すると時間は0になります。これはなぜですか? )これは、TenKSetを完了するのにかかる時間の2倍の時間を要さないはずです(私はここではO(sqrt(n))であると信じていますが、間違っている可能性があります)。

+0

これは非常に興味深い部分 '日時が開始される= DateTime.Now; TimeSpan時間。 (int space = 0; space <2; space ++) { Console.WriteLine( ""); time = DateTime.Now.Subtract(begin); } '。 –

+2

**私はあなたが時間** **ソート後に時間を測定しているので、両方のために0を得ていないことに驚いています: – Slai

+0

'Stopwatch'クラスを見て、それは' DateTime'よりもベンチマークの方が使いやすいです。特に静的なStartNewメソッドは便利です: 'var stopwatch = Stopwatch.StartNew();' https://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch(v=vs.110).aspx – stevieg

答えて

1

これは、DateTime.Nowを使用して2つの測定値の間のステートメントです。

PS。 「私が間違っている可能性がある」と言うと、あなたは間違っています。

1

あなたがbubbleSort時間を測定したい場合は、メソッド全体をラップする必要があります

public static void bubbleSort(int[] array) 
{ 
    // start measuring 
    DateTime begin = DateTime.Now; 

    int start = 0; 
    bool swapMade = true; 

    while (start < array.Length - 1 && swapMade == true) 
    { 
     ... 
    } 

    // stop measuring 
    TimeSpan time = DateTime.Now.Subtract(begin); 

    Console.WriteLine(
     "Time for bubblesort to complete: " + time.ToString(@"mm\:ss\.ffffff")); 
} 
関連する問題