看下哪里错了,帮修改下

#include<stdio.h>
#define M 4
#define N 5
int main()
{
int i,j,k,m,a[M][N],b[MN];
printf("请输入一个4
5的二维数组:\n");
k=0;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&a[M][N]);
}
}
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
b[k]=a[M][N];
k++;
}
}
int r=0;
for(i=0;i<M*N-1;i++)
{
for(j=0;j<M*N-i-1;j++)
{
if(b[r]>b[r+1])
{
m=b[r];
b[r]=b[r+1];
b[r+1]=m;
}
}
}
int o=0;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
a[M][N]=b[o];
o++;
}
}
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%d\t",a[M][N]);
}
}
return 0;
}

排序的地方错了,应该用b[j]和b[j+1]进行比较,如下图所示:

img

代码修改如下:

#include<stdio.h>
#define M 4
#define N 5
int main()
{
    int i,j,k,m,a[M][N],b[M*N];
    printf("请输入一个4*5的二维数组:\n");
    k=0;
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        {
            scanf("%d",&a[M][N]);
        }
    }
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        {
            b[k]=a[M][N];
            k++;
        }
    }
    int r=0;
    for(i=0;i<M*N-1;i++)
    {
        for(j=0;j<M*N-i-1;j++)
        {
            //修改的地方
            if(b[j]>b[j+1])//if(b[r]>b[r+1])
            {
                m=b[j];//b[r];
                b[j]=b[j+1];//b[r]=b[r+1];
                b[j+1]=m;;//b[r+1]=m;
            }
        }
    }
    int o=0;
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        {
            a[i][j]=b[o];
            o++;
        }
    }
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        {
            printf("%d\t",a[i][j]);
        }
    }
    return 0;
}

程序是实现什么功能呢?现在存在什么问题。