为什么处理已排序数组比未排序数组更快?
大家好。我正在学习C++,遇到了一个奇怪的性能行为。我写了一个简单的程序,对数组元素求和,但只对大于某个阈值(例如128)的元素求和。我测量了已排序和未排序数组的执行时间——结果让我震惊。
以下是代码:
```cpp
#include
#include
#include
#include
int main() {
const int SIZE = 100000;
std::vector data(SIZE);
// 用随机数填充
for (int i = 0; i < SIZE; ++i) {
data[i] = rand() % 256;
}
// 为未排序情况创建副本
std::vector unsorted = data;
std::vector sorted = data;
std::sort(sorted.begin(), sorted.end());
long long sum = 0;
auto start = std::chrono::high_resolution_clock::now();
for (int i = 0; i < SIZE; ++i) {
if (sorted[i] >= 128) {
sum += sorted[i];
}