【问题标题】:row sorted column sorted matrix行排序列排序矩阵
【发布时间】:2014-06-02 22:51:16
【问题描述】:

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

【问题讨论】:

    标签: python c algorithm sorting matrix


    【解决方案1】:

    将您的 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;
    }
    

    【讨论】:

      【解决方案2】:

      假设有一个RxC 数组,其中R ~ C 和R&gt;C,很明显该任务至少需要对所有行进行排序,这需要花费O(R.C.Log(C)) 的努力。将此与全局排序 O(R.C.Log(R.C)) = O(R.C.Log(C)) 的努力进行比较,您会发现尝试寻找捷径可能并不值得,除非 R&gt;&gt;C。

      【讨论】:

      • 好的。谢谢,但不是对所有元素进行排序,然后从中构造一个矩阵,还有另一种方法吗?我需要这个来解决这个问题 - hackerearth.com/adobe-hiring-challenge/algorithm/mind-palaces-3 我需要检查输入数组的格式是否正确,如果不是,请重建它。
      • 您可以使用适当的比较和交换功能在数组中就地实现排序。快速排序适合。如果您希望以某种方式将算法映射到数组结构,您可以独立地对每一行进行排序,然后使用对整行进行操作的合并排序过程结束。
      • 下一次,请从头说出你想要什么!
      【解决方案3】:

      你必须用 2 for cicle 变成 for 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];
          }
      }
      

      最后,您将在 sum[0] 中获得行和列 A 的总和,在 sum[1] 中获得 B,...

      【讨论】:

        【解决方案4】:
         1  2  3  4  5
         6  7  8  9 10
         11 12 13 14 15 
        

        【讨论】:

        • :D 我明白这一点,但我正在寻找更复杂的东西,这样我就不必在一开始就对列表进行排序。有什么算法吗? :)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-04
        • 2022-12-22
        • 2023-01-27
        • 1970-01-01
        • 1970-01-01
        • 2019-05-31
        • 2017-02-15
        相关资源
        最近更新 更多