求c语言大神解答!!在线等!!谢谢了!!!有一个由整数组成的n行m列矩阵,请对矩阵中的元素重新进行

求c语言大神解答!!在线等!!谢谢了!!!有一个由整数组成的n行m列矩阵,请对矩阵中的元素重新进行排列,使得同行元素中右边的元素大于左边的元素,同列的元素中下边的元素大于上边的元素。这里n、m可以取小点比如4,5。

#include<stdio.h>
void BubbleSort(int a[],int n)

int i,j,r;
for(i=0;i<n;i++)
{
for(j=i;j>=1;j--)
{
if(a[j]<a[j-1])
{
r=a[j];
a[j]=a[j-1];
a[j-1]=r;
}
else break; 
}
}}
int main()
{
const int n=4;
const int m=5;
int a[n][m],i,j,temp[m*n];
for(i=0;i<n;++i)
for(j=0;j<m;++j)
{
scanf("%d",&a[i][j]);//从键盘输入矩阵各个元素
temp[5*i+j]=a[i][j];//二维数组一维化
}
BubbleSort(temp,m*n);//对一维数组排序
for(i=0;i<n;++i)
{
for(j=0;j<m-1;++j)
{
a[i][j]=temp[5*i+j];//归还给二维数组
printf("%d ",a[i][j]);//打印出来
}
a[i][j]=temp[5*i+j];
printf("%d\n",a[i][j]);
}
return 0;
}

温馨提示:内容为网友见解,仅供参考
第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;
}

第3个回答  2015-12-07
把冒泡排序改下 升序改降序 再在前面加一个for循环
第4个回答  2017-07-31
这个完全看不懂的啊
相似回答