有关于数据排序的问题
闲着无聊的时候看看算法,突然发现一个奇怪的事情。很多算法,都会在计算前给数据排序。
从直观上来看。10000条数据,无论排序与否。都要遍历1w次,但是查询效率确实是提升了。
举个例子:
using System.Diagnostics;
int arraySize = 32768;
var data = new int[arraySize];
Random rnd = new Random(0);
for (int c = 0; c < arraySize; ++c)
data[c] = rnd.Next() % 256;
Array.Sort(data); // 注释的地方
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
long sum = 0;
for (int i = 0; i < 100000; i++)
{
// Primary loop
for (int c = 0; c < arraySize; ++c)
{
if (data[c] >= 128)
sum += data[c];
}
}
stopwatch.Stop();
// 获取经过的时间
TimeSpan elapsedTime = stopwatch.Elapsed;
// 输出结果
Console.WriteLine("elapsedTime: " + elapsedTime);
// 或者输出毫秒数
Console.WriteLine("TotalMilliseconds: " + elapsedTime.TotalMilliseconds);
Console.WriteLine("Sum: " + sum);
// 重置计时器
stopwatch.Reset();
这段代码不注释排序和注释排序的执行结果相差了3倍
说了是编译器优化(用c来实验的话10万次重复相差在毫秒级别,属于误差范围),本话题完结