如何计算多个秒表时间的平均值

本文关键字:时间 平均值 何计算 计算 | 更新日期: 2023-09-27 18:14:09

所以基本上我要做的是计算我的for循环产生的所有秒表时间的平均值,并把它输出到控制台。我知道如何计算平均数,但我不知道如何将其应用于秒表计时。请帮忙吗?

for (int index = 0; index < iterations; index++)
        {
            // loop to generate an array of random numbers      
            for (int count = 0; count < arrayOfInts.Length; count++)
            {
                arrayOfInts[count] = r.Next(numitems);
            }
            // a random array has been created start the clock and sort it
            Stopwatch elpased = new Stopwatch();
            elpased.Start();
            selectionSort(arrayOfInts);
            elpased.Stop();
            if (iterations == iterations) 
            {
                var average = elpased.Elapsed;
                Console.WriteLine ("Time for ___ sort to complete: " + elpased.Elapsed.ToString ());
            }
            }

            Console.ReadLine();
    }

如何计算多个秒表时间的平均值

我建议使用ElapsedTicks代替。您需要存储每次迭代的刻度并计算之后的平均值:

List<long> ticks = new List<long>();
for (int index = 0; index < iterations; index++)
{
    // loop to generate an array of random numbers      
    for (int count = 0; count < arrayOfInts.Length; count++)
    {
        arrayOfInts[count] = r.Next(numitems);
    }
    
    // a random array has been created start the clock and sort it
    Stopwatch elapsed = new Stopwatch();
    elapsed.Start(); 
    selectionSort(arrayOfInts);
    elpased.Stop();
    ticks.Add(elapsed.Elapsed.Ticks);
}
double avg = ticks.Average(); // create average of ticks
TimeSpan averageTimeSpan = new TimeSpan((long)avg); // cast needed from double to long

有一种更优雅的方法来生成随机数数组:

arrayOfInts = Enumerable.Range(0, count).Select(i => r.Next(numitems)).ToArray();

因为LINQ使用延迟执行,你甚至可以预先声明这个"查询"并在迭代中调用ToArray():

List<long> ticks = new List<long>();
IEnumerable<int> randomQuery = Enumerable.Range(0, count).Select(i => r.Next(numitems));
for (int index = 0; index < iterations; index++)
{
     //creates NEW random numbers each time, because of deferred execution
     arrayOfInts = randomQuery.ToArray(); 
     ...

另一个建议是让Stopwatch测量整个时间,并将结果除以iterationsStopwatch es可以恢复:

IEnumerable<int> randomQuery = Enumerable.Range(0, count).Select(i => r.Next(numitems));
Stopwatch elapsed = new Stopwatch(); // only ONE instance needed
for (int index = 0; index < iterations; index++)
{
     arrayOfInts = randomQuery.ToArray();
     elapsed.Start(); // resumes without a reset
     selectionSort(arrayOfInts);
     elpased.Stop();
}
TimeSpan averageTimeSpan = new TimeSpan(elapsed.ElapsedTicks/iterations);