【发布时间】:2018-04-25 12:08:08
【问题描述】:
我必须构建一个函数,按行排序矩阵,然后按列或其他方式,保留矩阵内的值。 矩阵是一个巨大的矩阵,所以我使用的算法必须是 nlogn 算法。
我的结构如下:
typedef struct{
unsigned int line, column;
float value;}Matrix;
Matrix matrix[size_of_matrix*size_of_matrix];
static int numb_of_matrix; /*Whenever I ask the user to insert values to the matrix, I increase this number to insert the structure inside my vector matrix*/
我还存储了用户填充的行和列的最大和最小索引,并且这些边界之间的索引设置为 0,所以我创建了一个 size_of_matrix*size_of_matrix 的矩阵,全为 0,然后我插入我的值,同时存储用户填充的行和列的最高和最低索引。
鉴于此,我需要先按行的升序排序,然后按列的升序排序,或者反过来。 我必须知道我必须以哪种方式对矩阵进行排序的方式是,如果我需要先按列对矩阵进行排序,或者如果我需要先按行对矩阵进行排序,则询问用户输入 C。
因此,如果我向矩阵介绍了以下内容:
[0,3]=1.2
[3,0]=2.1
[4,5]=2.2
[2,5]=3.2
[3,5]=4.2
然后我先按行排序,应该变成
[0,3]=1.2
[2,5]=3.2
[3,0]=2.1
[3,5]=4.2
[4,5]=2.2
如果矩阵足够小,这个问题会很快解决,但我的矩阵将有近 100 万个值,所以我不能使用冒泡排序或任何其他 n^2 排序算法之类的算法。
【问题讨论】:
-
这里en.wikipedia.org/wiki/… 列出了许多排序算法以及复杂性。
-
“用户”是人工输入吗?还是程序的另一部分?
-
所有输入是否同时给出?还是您需要随时接受新的输入并进行排序?
-
@4386427 我既可以从文件中读取,也可以从人工输入中读取。我有一个函数可以读取输入并将其存储为程序运行。因此,如果输入是由人给出的,则在他想要的时候给出,如果用户也想要,我必须对矩阵进行排序。
-
为什么不直接将元素放在矩阵中的正确位置?
标签: c matrix sparse-matrix