如何用C++实现二维数组列排序并完成输入输出展示
C++ 二维数组按列升序排序实现方案
你当前代码仅处理了索引为0的第一列,要实现所有列单独升序排序,只需对每一列依次执行「提取列元素→排序→写回数组」流程即可。
修正后完整可运行代码
#include <iostream> using namespace std; int main() { int col, row; cout << "Column = "; cin >> col; cout << "Row = "; cin >> row; // 注意:变长数组(VLA)非C++标准语法,仅部分编译器支持,如需兼容标准可改用vector<vector<int>> int array[row][col]; int temp_col[row]; // 输入数组元素:按行输入 for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { cin >> array[i][j]; } } // 输出原矩阵 cout << "\n原数组矩阵:\n"; for (int i = 0; i < row; i++) { cout << "{ "; for (int j = 0; j < col; j++) { cout << array[i][j]; if (j != col -1) cout << ", "; } cout << " }" << endl; } // 按列排序:遍历每一列 for (int j = 0; j < col; j++) { // 提取当前列元素到临时数组 for (int i = 0; i < row; i++) { temp_col[i] = array[i][j]; } // 冒泡排序当前列 int temp; for (int m = 1; m < row; m++) { for (int n = 0; n < row - m; n++) { if (temp_col[n] > temp_col[n+1]) { temp = temp_col[n]; temp_col[n] = temp_col[n+1]; temp_col[n+1] = temp; } } } // 排序后的列写回原数组 for (int i = 0; i < row; i++) { array[i][j] = temp_col[i]; } } // 输出排序后矩阵 cout << "\n按列升序排序后矩阵:\n"; for (int i = 0; i < row; i++) { cout << "{ "; for (int j = 0; j < col; j++) { cout << array[i][j]; if (j != col -1) cout << ", "; } cout << " }" << endl; } return 0; }
关键改动说明
- 调整了数组维度定义逻辑,采用常规的
array[行][列]行优先存储方式,符合多数开发者使用习惯 - 新增外层循环遍历所有列,对每一列单独执行提取、冒泡排序、写回操作
- 优化了矩阵输出格式,和你给出的示例展示效果匹配
- 补充了代码注释,方便理解每一步逻辑
如果需要兼容标准C++语法,把二维数组替换为vector<vector<int>> array(row, vector<int>(col))即可,其余逻辑无需改动。
内容的提问来源于stack exchange,提问作者Farhad
相关产品推荐
相关产品推荐

