How to sort the boundary elements of a matrix in C++

1 Answer

0 votes
#include <algorithm>
#include <iostream>
#include <vector>
   
void SortMatrixBoundaries(std::vector<std::vector<int>> &matrix) {
    int rows = matrix.size();
    int cols = matrix[0].size();
    
    std::vector<int> vector;
    
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            if (i == 0 || j == 0 || i == rows - 1 || j == cols - 1) {
                vector.push_back(matrix[i][j]);
            }
        }
    }
    
    sort(vector.begin(), vector.end());
    
    int vector_index = 0;

    for (int j = 0; j < cols; j++) {
        matrix[0][j] = vector[vector_index++];
    }
     
    for (int j = 0; j < cols; j++) {
        if (j == cols - 1) {
            for (int i = 1; i < rows; i++) {
                matrix[i][j] = vector[vector_index++];
            }
        }
    }
     
    for (int j = cols - 2; j > -1; j--) {
         matrix[rows - 1][j] = vector[vector_index++];
    }
     
    for (int i = rows - 2; i > 0; i--) {
         matrix[i][0] = vector[vector_index++];
    }
}



void PrintMatrix(std::vector<std::vector<int>> vec2d) {
    for (std::vector<int> vec1d : vec2d) {
        for (int val : vec1d) {
            std::cout << val << " ";
        }    
        std::cout << "\n";
    }
}
   
int main() {
    std::vector<std::vector<int>> matrix {
        { 1,  2,  3,  4,  5},
        { 6,  7,  8,  9, 10},
        {11, 12, 13, 14, 15},
        {16, 17, 18, 19, 20}
    };
    
    SortMatrixBoundaries(matrix);
    
    PrintMatrix(matrix);
}
   
   
   
   
   
/*
run:

1 2 3 4 5 
20 7 8 9 6 
19 12 13 14 10 
18 17 16 15 11 
      
*/

 

 



answered Jun 28, 2023 by avibootz

Related questions

1 answer 79 views
1 answer 74 views
1 answer 75 views
2 answers 81 views
2 answers 83 views
1 answer 74 views
2 answers 88 views
...