2015-05-24 4 views
3

Я хочу рассчитать время алгоритма сортировки пузырьков в C#. Но он всегда дает 0. Это мой код.Как получить время в миллисекундах?

public void bubbleSort(int[] arr, ref double time) 
{ 
    var sp = new Stopwatch(); 
    sp.Start(); 
    int temp = 0; 

    for (int i = 0; i < arr.Length; i++) 
    { 
      for (int sort = 0; sort < arr.Length - 1; sort++) 
      { 
       if (arr[sort] > arr[sort + 1]) 
       { 
        temp = arr[sort + 1]; 
        arr[sort + 1] = arr[sort]; 
        arr[sort] = temp; 
       } 
     } 
    } 
    sp.Stop(); 

    time = sp.Elapsed.Milliseconds*1000; 
} 

в основном время всегда 0. Какую ошибку я совершил в этом коде.

+0

Вы отлаживаете свой код и видите значение «Миллисекунды»? –

+1

Если ваш массив не очень большой, то, вероятно, ваш алгоритм занимает менее 1 мс для выполнения. –

+0

Обычно для измерения времени вы выполняете альгорифм несколько тысяч или миллионов раз, потому что часто одна итерация занимает так мало времени, чтобы быть точно измеримой. – Alejandro

ответ

5

Когда вы получаете Milliseconds, вы только получаете миллисекунды компонент времени. Таким образом, 1.0501s будет отображаться только как 50ms, а не 1050.1ms. Кроме того, поскольку это возвращает int, вы будете не см. Дробные миллисекунды, что может иметь место для такого короткого алгоритма.

Вместо этого используйте TotalMilliseconds, который будет возвращать все время в единицах миллисекунд, а также перенастроить double - который включает в себя дробные части.

+1

да работает с полными милисекундами – Hiba

3

Вы должны использовать TotalMilliseconds свойству

Получает значение текущей структуры TimeSpan, выраженной в целом, так и дробные миллисекунды.

time = sp.Elapsed.TotalMilliseconds * 1000; 
+1

спасибо .... его работает как чемпион – Hiba

Смежные вопросы