【问题标题】:What is an efficient way to get column from multi-dimensional array in C?从C中的多维数组中获取列的有效方法是什么?
【发布时间】:2014-04-24 17:37:17
【问题描述】:

我有两个结构: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;
}

【问题讨论】:

标签: c arrays algorithm


【解决方案1】:

摆脱ix

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

【讨论】:

  • 好多了。感谢您的帮助。
【解决方案2】:

/* 复制列。 */

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    相关资源
    最近更新 更多