首页IT科技二维数组遍历求和求平均分java(C++ 性能小测 1 二维数组的遍历效率)

二维数组遍历求和求平均分java(C++ 性能小测 1 二维数组的遍历效率)

时间2025-06-18 03:24:25分类IT科技浏览4312
导读:遍历二维数组时,常规思路是使用一个嵌套循环。一方面,由于 CPU 使用了分支预测技术,因此通常...

遍历二维数组时              ,常规思路是使用一个嵌套循环              。一方面                  ,由于 CPU 使用了分支预测技术       ,因此通常将循环次数最多循环的放在最内层                  。另一方面           ,由于二维数组是按行存储的                  ,因此遍历二维数组时          ,一般将列循环放在内层       。但当数组的行数rowSize大于数组的列数columnSize时        ,这两条规律无法同时得到满足           。下面通过一个小测试来判断这个时候哪种方式效率更高                  。

#include <iostream> #include <ctime> using namespace std; const int rowSize = 50000; const int columnSize = 2000; const int testCount = 100; int main() { //生成大型二维数组 int** arr = new int * [rowSize]; for (int i = 0; i < rowSize; i++) { arr[i] = new int[columnSize]; for (int j = 0; j < columnSize; j++) { arr[i][j] = rand() % 5; } } //声明工具变量 double meanTime = 0; long double sum = 0; clock_t start, end, time; //将列循环放在内层                   ,进行多次测试 time = 0; for (int k = 0; k < testCount; ++k) { sum = 0; start = clock(); for (int i = 0; i < rowSize; ++i) { for (int j = 0; j < columnSize; ++j) { sum += arr[i][j]; } } end = clock(); sum = sum / (rowSize * columnSize); time += end - start; } meanTime = (double) time / testCount / CLOCKS_PER_SEC; cout << "列循环放在内层平均耗时" << meanTime << "秒             ,平均值为" << sum << endl; //将列循环放在外层    ,进行多次测试 time = 0; for (int k = 0; k < testCount; ++k) { sum = 0; start = clock(); for (int j = 0; j < columnSize; ++j) { for (int i = 0; i < rowSize; ++i) { sum += arr[i][j]; } } end = clock(); sum = sum / (rowSize * columnSize); time += end - start; } meanTime = (double) time / testCount / CLOCKS_PER_SEC; cout << "列循环放在外层平均耗时" << meanTime << "秒                    ,平均值为" << sum << endl; //释放大型二维数组内存 for (int i = 0; i < rowSize; i++) delete[] arr[i]; delete[] arr; system("pause"); return 0; }

测试输出如下:

列循环放在内层平均耗时0.42657秒                ,平均值为1.99975 列循环放在外层平均耗时1.35246秒,平均值为1.99975 请按任意键继续. . .

由此可得:使用嵌套循环遍历二维数组时                 ,将列循环放在内层运行效率更高                   ,即使所遍历的二维数组行数远大于列数          。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
windows10地区设置(如何修改Windows11系统的"国家或地区"?win11汉化步骤) phpcms是什么框架(PHPCMS 是 ThinkPHP 开发的吗?)