问题 5340 --小飞的矩阵排序

5340: 小飞的矩阵排序★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 28  解决: 14
[提交][状态][命题人:]

题目描述

自从小飞学会sort排序后,对之前学过的冒泡排序,选择排序都不屑一顾,因为sort排序使用方便,效率还高。但最近他遇到一个瓶颈,如何利用sort排序对二维数组每行分别进行排序,思来想去他认为这是sort排序的不足之处。最近他认真的学习了指针,才发现不是sort排序不足,是自己知识运用不够熟练。但只想摆烂的他寄希望于好朋友——你,希望你能帮他解决这个问题。

#include<iostream>
___(9)___;
using namespace std;
int n, m, i, j, p;
int **a, ___(1)___; //用于生成二维数组
int main() {
	cin >> n >> m;
	a = new int* [n];
	for (i = 0; i < n; ++i) ___(2)___; //生成每行的一维数组
	for (i = 0; i < n; ++i)
		for (j = 0; j < m; ++j) cin >> *(*(a + i) + j);
	cin >> p;
	if (p % 2) {
		for (i = 0; i < n; ++i) sort(___(3)___, ___(4)___); //sort排序
	} else {
		___(5)___;//这里生成什么?
		for (j = 0; j < m; ++j) *(b + j) = new int [n];
		for (i = 0; i < n; ++i)
			for (j = 0; j < m; ++j) ___(6)___;
		for (j = 0; j < m; ++j) sort(*(b + j), *(b + j) + n);
		for (j = 0; j < m; ++j) {
			for (i = 0; i < n; ++i) *(*(a + i) + j) = *(*(b + j) + i);
			___(7)___;
		}
		delete [] b;
	}
	for (i = 0; i < n; ++i) {
		for (j = 0; j < m; ++j) cout << *(*(a + i) + j) << " ";
		cout << endl;
		delete [] *(a + i);
	}
	___(8)___;
	return 0;
}


输入

第一行输入两个整数n,m表示矩阵的行数与列数;均小于25

接下来n行,每行m个整数,代表矩阵。

最后输入一个整数pp为奇数时分别对矩阵的每行进行排序;p为偶数时分别对矩阵的每列进行排序。


输出

排序后的矩阵。(同一行每两个数用空格隔开)

样例输入
Copy
3 4
9 5 1 7
6 8 4 2
3 0 2 4
1
样例输出
Copy
1 5 7 9
2 4 6 8
0 2 3 4

提示

样例2输入

3 4
9 5 1 7
6 8 4 2
3 0 2 4
2
样例2输出
3 0 1 2
6 5 2 4
9 8 4 7

来源

[提交][状态]