c - 从 C 中的多维数组中获取列的有效方法是什么?

标签 c arrays algorithm

我有两个结构:ARRAY2D(多维)和 ARRAY(一维)。我想从 ARRAY2D 类型中获取一列并将其复制到 ARRAY 类型中。

尽管我的代码在下面运行,并且我认识到这可能是一种从数组中获取列的糟糕方法,但我很好奇可能有哪些优化可以避免 O(n2) 算法。从 C 中的数组中获取列的有效方法是什么?

BOOL arr2_getColumn(ARRAY2D *arr, const int column_index, ARRAY *returnedArray)
{
    int x, y;
    int i = 0;

    /* Check for valid array. */
    if (arr->blnIsInit != TRUE)
        return FALSE;

    /* Initialize array with the column's height. */ 
    if (!arr_init(returnedArray, arr->height))
        return FALSE;

    /* Copy over column. */
    for (y = 0; y < arr->height; y++)
    {
        for (x = 0; x <= column_index; x++)
        {
            if (x == column_index)
            { 
                returnedArray->array[i] = arr->array[y * arr->width + x];
                i++;
            } 
        }
    } 

    /* Set the new size. */
    returnedArray->size = arr->height;

    return TRUE;
}

最佳答案

去掉 ix

for (y = 0; y < arr->height; y++)
{
    returnedArray->array[y] = arr->array[y * arr->width + column_index];
} 

关于c - 从 C 中的多维数组中获取列的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23275985/

相关文章:

java - USACO 培训 : Mixing Milk fails on the last Case

javascript - 如何使用 React 映射对象数组的对象数组

cocoa - cocoa 中的按钮数组?

c - 使用 shmat 和 shm_open

c - Scanf 不等待输入

arrays - 红色/系统中指向 'array' 的指针

Swift算法计算到达目的地的可能方式

c - 实现快速选择算法以找到第 k 个最小的数字

c - C 中人类可读的十六进制时间戳

c - 在 C 中打印矩阵时遇到问题