行列优先存储与循环

对于一个二维数组A[m][n],在计算机内存中有两种存储方式:行优先存储和列优先存储。

行优先存储,顾名思义,就是一行的数据存放在一起,然后逐行存放。列优先存储,就是每一列的数据是存储在一起的,一列一列地存放在内存中。这两种存储方法,对于编写遍历二维矩阵的循环语句,还是有一定影响的。比如,如果是按行优先存储的,那么在遍历时,一行一行的读取数据,肯定比一列一列地读取整个数组,要方便许多。

下面以两段程序来说明问题。

这是C++代码。

<pre name="code" class="cpp">#include<iostream>
#include<ctime>
using namespace std;
int main(){
	int i,j,m=20;
	int a[100][1000];
	clock_t start, end;

	start = clock();
	while(m){
		for(i=0; i<100; ++i){
			for(j=0; j<1000; ++j){
				a[i][j]=1;
			}
		}
		--m;
	}
	end = clock();
	cout<<"case 1 time is: "<<end-start<<endl;

	m=20;
	start = clock();
	while(m){
		for(j=0; j<1000; ++j){
			for(i=0; i<100; ++i){
				a[i][j]=1;
			}
		}
		--m;
	}
	end = clock();
	cout<<"case 2 time is: "<<end-start<<endl;
	
	system("pause");
	return 0;
}


 在本人机器上,结果如下: 

case 1 time is: 4
case 2 time is: 5
请按任意键继续. . .


下面是Matlab代码:

a(100,1000)=0;
tic;
for m=1:20
    for i=1:100
        for j=1:1000
            a(i,j)=1;
        end
    end
end
time=toc

tic;
for m=1:20
    for i=1:1000
        for j=1:100
            a(j,i)=1;
        end
    end
end
time=toc
在本人机器上的结果如下:

time =
    0.0160


time =
    0.0120

由上面的例子我们可以看出,C,C++中是行优先存储的,以第一种循环的方式,效率比较高。在matlab中,是列优先存储的,以第二种方式的运行效率高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值