Por que processar um array ordenado é mais rápido do que um não ordenado?
Olá a todos. Estou estudando C++ e me deparei com um comportamento estranho de desempenho. Escrevi um programa simples que soma os elementos de um array, mas apenas se eles forem maiores que um certo limite (por exemplo, 128). Medir o tempo de execução para um array ordenado e um não ordenado — e os resultados me chocaram.
Aqui está o código:
```cpp
#include
#include
#include
#include
int main() {
const int SIZE = 100000;
std::vector data(SIZE);
// Preenche com números aleatórios
for (int i = 0; i < SIZE; ++i) {
data[i] = rand() % 256;
}
// Cópia para o caso não ordenado
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];
}
}
}