合并排序数组?

时间:2019-01-22 18:04:09

标签: java arrays sorting matrix

我有一个带有排序行的矩阵。现在,我想为我的列进行某种合并排序(我想将数字保存在升序的另一个数组中)。有什么有效的解决方案吗?

我不想遍历孔矩阵来找到最小值。

1 个答案:

答案 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]