行排序列排序矩阵

2 投票
4 回答
686 浏览
提问于 2025-04-18 03:15

有没有人能推荐一个算法,用来生成一个行和列都排序的二维矩阵,给定一个整数列表?

我的意思是,这个矩阵的所有行和所有列都应该是有序的,最好是整体升序或降序。

我想到的办法是,先把这些元素排序,然后从矩阵的左上角(0,0)开始放第一个元素,接着放到(0,1),再放到(1,0),然后是(0,2),再到(2,0),依此类推。当某一行或某一列放满了,就换到下一行或下一列继续放。

我的算法示例 -

元素是从零开始的自然数。

3行5列的矩阵 -

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

5行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 个回答

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

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

0

你需要在一个循环里面再用一个循环:

举个例子:

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];
    }
}

最后,你会得到第一列和第一行的总和在sum[0]里,第二列和第二行的总和在sum[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

把你的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;
}

撰写回答