行排序列排序矩阵

时间:2014-04-18 12:16:05

标签: python c algorithm sorting matrix

任何人都可以建议一个算法,用于生成一个行排序,列排序的二维矩阵给定一个整数列表? 我的意思是所有行和所有列都应该排序,最好是整个矩阵的asc / desc顺序。

我想到的是首先对元素列表进行排序,从0,0开始,然后将下一个元素放在0,1,然后是1,0,然后是0,2,然后是2.0,依此类推。如果行/列存在限制违规,请选择下一行/列并继续。

我的算法示例 - 元素是从零开始的自然数。

3 X 5矩阵 -

0        1      3   5   7 
2        6      9   11  13
4        8      10  12  14

5 X 7矩阵 -

0     1      3     5     7   9  11
2     10     13   15    17  19  21
4     12     18   23    24  26  28
6     14     20   25    29  30  32
8     16     22   27    31  33  34

这是对的吗? 你能提出一个替代算法和任何代码(Python / C)吗? 提前谢谢。

编辑 - 最好不要在Python中使用任何其他库,例如numpy等。有没有办法用简单的普通旧python代码实现它?

4 个答案:

答案 0 :(得分:2)

将您的2x2矩阵视为单维数组,并使用qsort()对其进行排序。 瞧!

int arr[3][3];
for (int row = 0; row < 3; row++) {
    for (int col = 0; col < 3; col++) {
        arr[row][col] = row * 3 + col;
    }
}
qsort(arr[0], 9, sizeof (int), delta);

int delta(const void *a, const void *b) {
    const int *aa = a;
    const int *bb = b;
    return *aa - *bb;
}

答案 1 :(得分:0)

假设RxC数组,R ~ CR>C,很明显该任务至少要对所有行进行排序,需要付出努力O(R.C.Log(C))。将此与全局排序O(R.C.Log(R.C)) = O(R.C.Log(C))的努力相比较,您会发现尝试查找快捷方式可能并不值得,除非R>>C

答案 2 :(得分:0)

你必须使用2作为cicle进入cicle:

一个例子:

int matrix[4][4]; //your matrix is a 4x4 in this example
int sum[]={0,0,0,0};

for(int index=0; index<=4; index++){
    for(int i=0;i<=4;i++){  //here sum the row
        sum[index]+=matrix[index][i];
    }

    for(int i=0;i<=4;i++){  //here sum the column
        sum[index]+=matrix[i][index];
    }
}

最后你将得到总和[0]中的行和列A,总和[1]中的B,...

答案 3 :(得分:-1)

 1  2  3  4  5
 6  7  8  9 10
 11 12 13 14 15