秒表只有 0ms
Stopwatch has only 0ms
我有 QuickSort 和 Test Class 用于该排序。
秒表不工作,总是0ms。
任务是实现指定的算法 - 将程序设计为控制台应用程序。我需要根据源数据的长度来估计算法的执行时间。
快速排序
public static void Sorting(int[] array, int first, int last)
{
int x = array[(last - first) / 2 + first];
int temp;
int i = first;
int j = last;
while (i <= j)
{
while (array[i] < x && i <= last) ++i;
while (array[j] > x && j >= first) --j;
if (i<=j)
{
temp = array[i];
array[i] = array[j];
array[j] = temp;
++i;
--j;
}
}
if (j > first)
{
Sorting(array, first, j);
}
if (i < last)
{
Sorting(array, i, last);
}
}
测试
class Program
{
static void Main(string[] args)
{
Stopwatch stopwatch = new Stopwatch();
int[] array = new int[20];
Random random = new Random();
for (int i=0; i<array.Length; i++)
{
array[i] = random.Next(1, 20);
}
Console.WriteLine("Sorting...");
stopwatch.Start();
for (int i=0; i < array.Length; i++)
{
QuickSort.Sorting(array, 0, array.Length - 1);
}
stopwatch.Stop();
Console.WriteLine("\nCheck:");
foreach (int x in array)
{
Console.WriteLine(x + "");
}
Console.WriteLine("Time: {0}ms", stopwatch.ElapsedMilliseconds);
stopwatch.Reset();
Console.ReadKey();
}
}
已连接所有图书馆。
只要你的输入只有 20 个元素,几乎不需要时间就可以对其进行排序。请尝试使用更大的输入或尝试查找刻度而不是毫秒。
如果你使用 Elapsed
而不是 ElapsedMilliseconds
你会得到类似的东西:
Time: 00:00:00.0004201ms
对这么小的数组进行排序甚至不需要 1 毫秒。事实上,我怀疑写入控制台或可能的线程切换对时间的影响更大。
使用 200 件商品returns:
Time: 00:00:00.0023507ms
或
Time: 00:00:00.0050675ms
每次执行都会给出不同的结果,因为快速排序对元素的相对顺序很敏感。线程切换,垃圾收集,其他运行ning进程也会影响你得到的值。
获取 2000 个项目会在 210-220 毫秒左右产生结果。更一致,但 5% 的变化仍然太大。
如果你真的想要对你的代码进行基准测试,至少你需要多次测试它并取平均结果。
一个更好的主意是使用 BenchmarkDotNet 并让它 运行 你的代码足够长,直到它获得稳定的结果。
我有 QuickSort 和 Test Class 用于该排序。 秒表不工作,总是0ms。
任务是实现指定的算法 - 将程序设计为控制台应用程序。我需要根据源数据的长度来估计算法的执行时间。
快速排序
public static void Sorting(int[] array, int first, int last)
{
int x = array[(last - first) / 2 + first];
int temp;
int i = first;
int j = last;
while (i <= j)
{
while (array[i] < x && i <= last) ++i;
while (array[j] > x && j >= first) --j;
if (i<=j)
{
temp = array[i];
array[i] = array[j];
array[j] = temp;
++i;
--j;
}
}
if (j > first)
{
Sorting(array, first, j);
}
if (i < last)
{
Sorting(array, i, last);
}
}
测试
class Program
{
static void Main(string[] args)
{
Stopwatch stopwatch = new Stopwatch();
int[] array = new int[20];
Random random = new Random();
for (int i=0; i<array.Length; i++)
{
array[i] = random.Next(1, 20);
}
Console.WriteLine("Sorting...");
stopwatch.Start();
for (int i=0; i < array.Length; i++)
{
QuickSort.Sorting(array, 0, array.Length - 1);
}
stopwatch.Stop();
Console.WriteLine("\nCheck:");
foreach (int x in array)
{
Console.WriteLine(x + "");
}
Console.WriteLine("Time: {0}ms", stopwatch.ElapsedMilliseconds);
stopwatch.Reset();
Console.ReadKey();
}
}
已连接所有图书馆。
只要你的输入只有 20 个元素,几乎不需要时间就可以对其进行排序。请尝试使用更大的输入或尝试查找刻度而不是毫秒。
如果你使用 Elapsed
而不是 ElapsedMilliseconds
你会得到类似的东西:
Time: 00:00:00.0004201ms
对这么小的数组进行排序甚至不需要 1 毫秒。事实上,我怀疑写入控制台或可能的线程切换对时间的影响更大。
使用 200 件商品returns:
Time: 00:00:00.0023507ms
或
Time: 00:00:00.0050675ms
每次执行都会给出不同的结果,因为快速排序对元素的相对顺序很敏感。线程切换,垃圾收集,其他运行ning进程也会影响你得到的值。
获取 2000 个项目会在 210-220 毫秒左右产生结果。更一致,但 5% 的变化仍然太大。
如果你真的想要对你的代码进行基准测试,至少你需要多次测试它并取平均结果。
一个更好的主意是使用 BenchmarkDotNet 并让它 运行 你的代码足够长,直到它获得稳定的结果。