背景
近期在项目中处理业务逻辑时遇到了大量需要进行连续条件判断的情况,于是联想起stackoverflow
上的高票问答, Why is it faster to process a sorted array than an unsorted array , 并结合自身理解做一个简要的分析整理。
问题可以抽象如下:
将一组不大小超过256的随机正整数填入数组中, 然后将数组中大于128的元素求和。但是会将程序分为两个参考组, 其一是在求和前对数组进行一次排序, 另一组则在求和前不进行排序,最后对比观察结果和运算时间。
#include <algorithm>
#include <ctime>
#include <iostream>
int main()
{
const unsigned arrSize = 32768;
int data[arrSize] = {
0};
// 随机填充0~256间的整数,为了方便结果对比此处未加入随机种子
for (unsigned int idx = 0; idx < arrSize; ++idx)
data[idx] = std::rand() % 256;
// 观察是否排序对求和计算的影响
std::sort(data, data + arrSize);
//开始验证
unsigned long long sum = 0;
clock_t startTime = clock();
//此处为了加强对比效果,将求和计算循环执行了10万次
for (unsigned int i = 0; i < 100000; ++i)
{
for (unsigned int idx = 0; idx < arrSize; ++idx)
{
if (data[idx] >= 128)
sum