企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 矩阵的按行遍历与按列遍历 > 原文: [https://www.geeksforgeeks.org/row-wise-vs-column-wise-traversal-matrix/](https://www.geeksforgeeks.org/row-wise-vs-column-wise-traversal-matrix/) 遍历矩阵的两种常见方式是行优先级和列优先级。 **行主要命令**:当逐行访问矩阵时。 **列主要订单**:当逐列访问矩阵时。 例子: ``` Input : mat[][] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} Output : Row-wise: 1 2 3 4 5 6 7 8 9 Col-wise : 1 4 7 2 5 8 3 6 9 ``` **差异**:如果根据时间复杂度来看,两者都导致 **`O(n^2)`**,但是当涉及到缓存级别时,订单访问之一将 与其他人相比更快 这取决于我们使用的语言。 像在 **C** 中一样,以行主格式存储矩阵,因此在第 i <sup>个</sup>之后访问第 i + 1 <sup>个</sup>元素时,很可能会导致命中, 这将进一步减少编程时间。 以下代码显示行主访问和列主访问的时间差。 ## C++ ```cpp // C program showing time difference // in row major and column major access #include <stdio.h> #include <time.h> // taking MAX 10000 so that time difference // can be shown #define MAX 10000 int arr[MAX][MAX] = {0}; void rowMajor() {   int i, j;   // accessing element row wise   for (i = 0; i < MAX; i++) {     for (j = 0; j < MAX; j++) {       arr[i][j]++;     }   } } void colMajor() {   int i, j;   // accessing element column wise   for (i = 0; i < MAX; i++) {     for (j = 0; j < MAX; j++) {       arr[j][i]++;     }   } } // driver code int main() {   int i, j;   // Time taken by row major order   clock_t t = clock();   rowMajor();   t = clock() - t;   printf("Row major access time :%f s\n",                  t / (float)CLOCKS_PER_SEC);   // Time taken by column major order   t = clock();   colMajor();   t = clock() - t;   printf("Column major access time :%f s\n",                 t / (float)CLOCKS_PER_SEC);   return 0; } ```