首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用二维数组与扁平化它来减少C语言中的运行时间

使用二维数组与扁平化它来减少C语言中的运行时间
EN

Stack Overflow用户
提问于 2019-11-20 11:25:58
回答 1查看 62关注 0票数 1

我正在处理一个二维数组,我的目标是尽可能减少我的函数(用C编写)的运行时间。我正在对2D数组进行统计计算,比如找出平均值和最小值。因此,需要使用嵌套循环来计算这些属性。在这种情况下,将2D数组转换为1D数组会提高性能吗?

EN

回答 1

Stack Overflow用户

发布于 2019-11-20 22:24:32

如果你把你的代码,可以使答案更正确.....

当您询问是否使用嵌套循环或不使用时使用

我认为没有区别的是,即使是一维或二维(计算平均值相同),打印数组中的所有元素也需要相同的步骤。

在某些情况下,如果您的数据是以和行中的每组元素的方式组织的,并且您只想对此行中的元素执行某些操作,则2D可能更好

嵌套循环的步骤与普通循环相同(唯一额外的事情是你使用额外的变量j而不是i only ....this可能会使程序为j占用额外的内存,我认为这没什么大不了的,因为现在处理器更快,RAM更大,并且不会影响性能,如果你需要数组有行和列的话)。

代码语言:javascript
复制
#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;
}

这是一个样本,证明他们采取了相同的步骤。用于计算循环步骤的两个计数器具有相同的值

如果你把你的代码放在上面,我们可能会有更好的想法……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58946168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档