我有一个带有排序行的矩阵。现在,我想为我的列进行某种合并排序(我想将数字保存在升序的另一个数组中)。有什么有效的解决方案吗?
我不想遍历孔矩阵来找到最小值。
答案 0 :(得分:0)
好吧,如果您对行进行了排序,那么您实际上并不需要每次都遍历整个矩阵。每次选择最小值时,只需要遍历1列,并跟踪每一行的单独索引即可。
含义如下:
int newSize = rows * cols;
int[] indexes = new int[rows];
double[] sortedArray = new double[newSize];
for (int i = 0; i < newSize; i++){
int minIndex = -1;
double minValue = Double.MAX_VALUE;
for (int j = 0; j < rows; j++) {
if (indexes[j] < cols && matrix[j][indexes[j]] < minValue){
minValue = matrix[j][indexes[j]];
minIndex = j;
}
}
sortedArray[i] = minValue;
indexes[minIndex]++;
}
示例输入
double[][] matrix = {
{ 1, 4, 100},
{ 5, 10, 13},
{11, 40, 55},
{ 0, 6, 10}
};
输出
[0.0, 1.0, 4.0, 5.0, 6.0, 10.0, 10.0, 11.0, 13.0, 40.0, 55.0, 100.0]