将矩阵每行元素从大到小排列(求纠错)解决思路

将矩阵每行元素从大到小排列(求纠错)


#include<stdio.h>
#define M 4
#define N 3
void swap(int *a,int *b);
main()
{
int a[M][N],i,j;
int **p,*pa[N];
    printf("请输入%d行整数,每行%d个整数:\n",M,N);
for(i=0;i<M;i++)
for(j=0;j<N;j++)
scanf("%d",&a[M][N]);
for(i=0;i<M;i++)
pa[i]=a[i];
for(p=pa;p<pa+M;p++)
{
for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
if(*(*p+i)<*(*p+j))
swap(*p+i,*p+j);
}
printf("排序结果:\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
printf("%-3d",a[i][j]);
printf("\n");
}
printf("\n");
        return;
}


void swap(int *a,int*b)
{
int k;
k=*a;
*a=*b;
*b=k;
}

------解决方案--------------------
应该是lz排序算法错误,比如对这行元素:1,5,3,9
   按lz算法排序后会这样:5,3,9,1显然不是从大到小的顺序
------解决方案--------------------
 scanf("%d",&a[i][j]);