PTA问题“n”阶方阵逐层排序问题

给你一个n阶方阵,请你把每行数据按数据从小到大排序并输出。

输入格式:
输入数据首先包含一个整数T,表示测试实例的个数,然后是T组测试数据。 每组测试数据的第一行输入1个整数n(1<n<20),接下来输入n行数据,每行n个整数。

输出格式:
对于每组测试,输出排好序后的结果。每行中各数据之间留一个空格。
输入样例:
2
3
4 9 2
3 5 7
8 1 6
2
3 5
1 2
输出样例:
2 4 9
3 5 7
1 6 8
3 5
1 2

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
    const int N = 20;
    int t, n;
    int a[N][N];
    cin >> t;
    for (int k = 0; k < t; k++)
    {
        cin >> n;
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++)
                cin >> a[i][j];
        for (int i = 0; i < n; i++)
            sort(&a[i][0], &a[i][0] + n);
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
                cout << a[i][j] << ' ';
            cout << '\n';
        }
    }
    return 0;
}

先存
再排序
再输出

#include <stdio.h>

int main()
{
    int t, n, i, j, k, q, m,*pa, *pb;   
    scanf("%d",&t);                    
    for(i = 1; i <= t; i++)             
    {
        scanf("%d",&n);                
        int a[n][n];                  
        for(k = 0; k < n; k++)       
            for(j = 0; j < n; j++)      
                scanf("%d",&a[k][j]);
        for(q = 0; q < n; q++) 
        {
            for(j = 0; j < n-1; j++)
            {
                for(k = j+1; k < n; k++)
                {
                    if(a[q][j] >a[q][k])
                    {
                        m = a[q][j];
                        a[q][j] = a[q][k];
                        a[q][k] = m;
                    }
                }
            }
        }
        for(k = 0; k < n; k++)  
        {
            for(j = 0; j < n; j++)
            {
                if(j == 0)
                {
                    printf("%d",a[k][j]);
                }
                else
                {
                    printf(" %d",a[k][j]);
                }
            }
            printf("\n");
        }
    }
}

#include
using namespace std;
int main()
{
int n,i,j,k,m,x,p;
int a[m][m];
cin>>n;
for(i=1;i<=n;i++)
{cin>>m;
for(j=0;j<m;j++)
for(k=0;k<m;k++)
cin>>a[j][k];

         for(j=0;j<m;j++)
        for(k=0;k<m;k++)     
            {
                cout<<a[j][k];
            if(k<m)
                cout<<" ";
            if(k==m-1)
                cout<<endl;
            }}

}
这是我的想法,中间用冒泡但是总是写不对,所以不知道应该怎么排序,或许有更好的写法