c语言编程题,求帮忙

如题所述

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <algorithm>
using namespace std;
int main()
{int i,j,t,m,n,l;
 scanf("%d%d",&n,&m);
 int a[n][m],*p=a[0];
 srand(time(0));
 for(i=t=0;i<n;i++)
 {for(j=0;j<m;j++)
  {a[i][j]=rand()%100;
   printf("%4d",a[i][j]);
  }
  printf("\n");
 }
 
 printf("\n");
 sort(a[0],a[0]+m*n);

 for(i=t=0;i<n;i++)
 {for(j=0;j<m;j++)
    printf("%4d",a[i][j]);
  printf("\n");
 }
 return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-11-28
提供思路:
1:把二维数组元素统一存储在一个新的数组中,然后排序,重新存回二维数组中。
2:先逐行排序,再逐列排序,然后先比较每行(或每列第一个元素)根据大小直接交换行,接着比较每行第二个元素,根据大小交换除第一个元素外的行,。。。直到最后一列。
其中方法1简单粗暴,方法2需要逻辑些,
方法2可以写一个函数,传递参数(i,j,k),用于交换行,其中i,j表示行,k是用于从第几个元素开始交换。
第2个回答  2018-11-28
貌似就是排序问题;可以用n*m的一维数组复制出来,排序完成后再复制到二维数组去
排序算法用冒泡把,简单些;
相似回答