请问这个代码有什么问题吗?为什么输入9 6 5(第一行) 1 2 3(第二行)后第二行的数字不正常啊?如图:

题目:

#include <stdio.h>
void change(int a[][51], int n, int m);
int main()
{
int m, n;
scanf("%d %d", &n, &m);
int a[51][51];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
scanf("%d", &(a[i][j]));
}
}
change(a, n, m);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
printf("%d", a[i][j]);
if (j != m - 1)
{
printf(" ");
}
}
if (i != n - 1)
{
printf("\n");
}
}
return 0;
}
void change(int a[][51], int n, int m)
{
int flage = 1;
while (flage)
{
flage = 0;
for (int i = 0; i < n * m -1 ; i++)
{
if(a[i/n][i%n]>a[(i+1)/n][(i+1)%n])
{
int r=a[i/n][i%n];
a[i/n][i%n]=a[(i+1)/n][(i+1)%n];
a[(i+1)/n][(i+1)%n]=r;
flage = 1;
}
}
}
}