任何人都可以建议一个算法,用于生成一个行排序,列排序的二维矩阵给定一个整数列表? 我的意思是所有行和所有列都应该排序,最好是整个矩阵的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代码实现它?
答案 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 ~ C
和R>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