我正在处理一个二维数组,我的目标是尽可能减少我的函数(用C编写)的运行时间。我正在对2D数组进行统计计算,比如找出平均值和最小值。因此,需要使用嵌套循环来计算这些属性。在这种情况下,将2D数组转换为1D数组会提高性能吗?
发布于 2019-11-20 22:24:32
如果你把你的代码,可以使答案更正确.....
当您询问是否使用嵌套循环或不使用时使用
我认为没有区别的是,即使是一维或二维(计算平均值相同),打印数组中的所有元素也需要相同的步骤。
在某些情况下,如果您的数据是以和行中的每组元素的方式组织的,并且您只想对此行中的元素执行某些操作,则2D可能更好
嵌套循环的步骤与普通循环相同(唯一额外的事情是你使用额外的变量j而不是i only ....this可能会使程序为j占用额外的内存,我认为这没什么大不了的,因为现在处理器更快,RAM更大,并且不会影响性能,如果你需要数组有行和列的话)。
#define ROWS 3
#define COLS 3
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int Arr[ROWS][COLS] = { { 10, 20, 30 }, { 40, 50, 60 }, { 70, 80, 90 } };
int Arr2[] = { 10, 20, 30, 60, 50, 40, 90, 80, 70 };
int counter1D, counter2D;
counter1D = counter2D = 0; //for storing number of iterations
puts("2D Way");
for (int i = 0; i < ROWS; i++) {
printf("print :the %d ROW\n", i);
for (int j = 0; j < COLS; j++) {
printf("%d\n", Arr[i][j]);
counter2D++;
}
}
//print all elements in array
//1D way :
puts("1D way");
for (int i = 0; i < ROWS * COLS; i++) {
printf("print the %d element %d\n", i, Arr2[i]);
counter1D++;
}
printf("2D counter %d 1D counter %d ", counter2D, counter1D);
return 0;
}这是一个样本,证明他们采取了相同的步骤。用于计算循环步骤的两个计数器具有相同的值
如果你把你的代码放在上面,我们可能会有更好的想法……
https://stackoverflow.com/questions/58946168
复制相似问题