2014-04-18 174 views
2

任何人都可以提出一个算法来生成行排序列排序二维矩阵给出一个整数列表? 我的意思是所有的行和所有列应该排序,最好以整个矩阵的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×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代码来实现这一点?

回答

2

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

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
1 2 3 4 5 
6 7 8 9 10 
11 12 13 14 15 
+0

:DI明白,但我正在寻找一些更复杂的东西,这样我就不必在开始时对列表进行排序。任何算法呢? :) –

0

假设一个RxC阵列,其中R ~ CR>C,显然这项任务至少需要给所有行进行排序,以努力O(R.C.Log(C))。将此与全球排序O(R.C.Log(R.C)) = O(R.C.Log(C))的努力相比较,您会发现尝试查找快捷方式可能并不值得,除非R>>C

+0

好的。感谢而不是排序所有元素,然后构建一个矩阵,还有另一种方法可以做到吗?我需要这个来解决这个问题 - http://www.hackerearth.com/adobe-hiring-challenge/algorithm/mind-palaces-3/我需要检查输入数组是否在正确的格式,如果不是,重构它。 –

+1

链接是私人的。 –

+0

您可以通过适当的比较和交换功能在阵列中就地执行排序工作。 Quicksort会适合。如果您希望以某种方式将算法映射到数组结构,则可以独立地对每行进行排序,然后使用对整行进行操作的mergesort遍来完成。 –

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的总和,B中sum [1],...