c语言啊 凑字数一下啊啊

题目:有一个n行m列(0<n<20,0<m<20)的整型二维数组b,编写程序对二维数组b[n][m]先按列降序排序,再按行降序排序。
输入:4 5
21 3 5 98 10
44 12 1 12 8
67 61 45 67 17
35 36 78 90 19
输出:
98 78 67 61 19
90 45 44 36 17
67 35 12 10 5
21 12 8 3 1
我的答案好像非常有问题,帮忙看看,

#include <stdio.h>
int main()
{  
  int a[20][20],i,j,m,n,t,z;
  scanf("%d%d",&n,&m);
  for(i=0;i<n;i++)
    for(j=0;j<m;j++)
      scanf("%d",&a[i][j]);
  
  for(j=0;j<m;j++)
    for(i=0;i<n-1;i++)
     for(z=0;z<n-1-i;z++)
    if(a[z][j]<a[z+1][j])
        {
        t=a[z][j];
        a[z][j]=a[z+1][z];
        a[z+1][j]=t;
        }
  
  for(i=0;i<n;i++)
    for(j=0;j<m-1;j++)
     for(z=0;z<m-1-j;z++)
    if(a[i][z]<a[i][z+1])
        {
        t=a[i][z];
        a[i][z]=a[i][z+1];
        a[i][z+1]=t;
        }
    
  for(i=0;i<n;i++)
{
    for(j=0;j<m;j++)
   {
    printf("%d ",a[i][j]);
   }
    printf("\n");
}
  return 0;
}


16行

a[z][j]=a[z+1][z];

有误
改为

a[z][j]=a[z+1][j];

21  3  5 98 10
44 12  1 12  8 
67 61 45 67 17 
35 36 78 90 19
按列降序排序
67 61 78 98 19
44 36 45 90 17
35 12  5 67 10
21  3  1 12  8
按行降序排序
98 78 67 61 19
90 45 44 36 17
67 35 12 10  5
21 12  8  3  1