第1个回答 2017-08-01
按一维数组从小到大排序即可。
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#define N 4
#define M 5
int main(int argc,char *argv[]){
int m[N][M],i,j,k,*p,t;
srand((unsigned)time(NULL));
printf("Sorting before:\n");
for(i=0;i<N;i++){
for(j=0;j<M;printf("%3d",m[i][j++]=rand()%100));
printf("\n");
}
printf("\nAfter ordering:\n");
for(p=(int *)m,t=M*N,i=0;i<t;i++){
for(k=i,j=k+1;j<t;j++)
if(p[k]>p[j])
k=j;
if(k-i)
j=p[i],p[i]=p[k],p[k]=j;
printf((i+1)%M ? "%3d" : "%3d\n",p[i]);
}
printf("\n");
return 0;
}
运行结果如下:
第2个回答 2019-02-17
#include<stdio.h>
#define max(a,b) (a>b?a:b)
int size_heng,size_shu;
int read() {
int temp;
scanf("%d",&temp);
return temp;
}
void swap(int *a,int *b) {
int temp=*a;
*a=*b,*b=temp;
}
void qsort(int l,int r,int a[]) {
int i=l,j=r,mid=a[(l+r)>>1];
while(i<=j) {
while(a[i]<mid)i++;
while(a[j]>mid)j--;
if(i<=j)swap(&a[i],&a[j]),i++,j--;
}
if(l<j)qsort(l,j,a);
if(i<r)qsort(i,r,a);
}
void swaparr(int a[],int b[]) {
int temp[size_heng+1];
for(int i=1; i<=size_heng; i++)
temp[i]=a[i];
for(int i=1; i<=size_heng; i++)
a[i]=b[i];
for(int i=1; i<=size_heng; i++)
b[i]=temp[i];
}
int map[32767][32767];
int main() {
puts("请输入矩阵的长");
size_heng=read();
puts("请输入矩阵的宽");
size_shu=read();
puts("请输入这个矩阵");
for(int i=1; i<=size_shu; i++) {
for(int j=1; j<=size_heng; j++)
map[i][j]=read();
qsort(1,size_heng,map[i]);
}
for(int i=1;i<=size_shu;i++)
for(int j=i+1;j<=size_shu;j++)
if(map[i][1]>map[j][1])
swaparr(map[i],map[j]);
puts("排序完成!!");
puts("现在的矩阵:");
for(int i=1; i<=size_shu; i++,puts(""))
for(int j=1; j<=size_heng; j++)
printf("%d ",map[i][j]);
return 0;
}