求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
这个完全看不懂的啊

求c语言大神解答!!在线等!!谢谢了!!!有一个由整数组成的n行m列矩阵...
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(...

c语言 有一个由整数组成的n行m列矩阵,请对矩阵中的元素重新进行排列
4 5 6 就满足你的那个条件了。如果数据不多,直接用冒泡排序好了

C语言编程:将n*m矩阵中每个元素向右移一列,最右一列换最左一列 输入...
Coding is happy...

c语言编程m行n列的矩阵转置
include<stdio.h> main(){ int a[4][4],b[4][4]; int i,j,m,n,k; printf("请为数组赋值:\\n"); for(i=0;i<4;i++) for(j=0;j<4;j++) scanf("%d",&a[i][j]); \/*输出a*\/ for(i=0;i<4;i++) { for(j=0;j<4;j++) printf("%3...

用C语言编程解决:在 n 行 n 列的矩阵中,每行都有最大的数,求这 n 个...
include "stdio.h"int main(){ int d[100][100],n,max[100],min;int i,j;printf("输入矩阵阶数:");scanf("%d",&n);printf("输入%d*%d阶矩阵:\\n",n,n);for(i=0;i<n;i++){ scanf("%d",&d[i][0]);max[i]=d[i][0];if(i==0) min=d[i][j];for(j=1;j<n;...

C语言,n行n列数组,求和,要求进来看,好的加满分
for(i = 1; i <=n ;i++) { \/\/列号在perm[i]中 if(i == perm[i]) return ; else { sum += data[i][perm[i]] ; } } for(i = 1; i <= n; i++) printf("A[%d][%d]=%d ",...

c语言编程:输入n,输出n行n列的矩阵
好的,根据您的要求,我编写了一段C语言代码来实现这个功能。请在编译器中粘贴下面的代码进行编译并运行。include <stdio.h> int main() { int n, i, j, count = 1;printf("请输入n的值:");scanf("%d", &n);for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++)...

C语言:有一个m*n矩阵,求出其最大值并输出。
include <stdio.h>void main(){int i,j,m,n,max,a[100][100];scanf("%d%d",&m,&n);for(i=0;i<m;i++)for(j=0;j<n;j++)scanf("%d",&a[i][j]);max=a[0][0];for(i=0;i<m;i++)for(j=0;j<n;j++)if(max...

c语言,怎么将一个n行,每行m个数的矩形数组矩阵逆时针转动90度啊_百度知...
define N 5 int main(void){ int a[N][M],left[M][N],right[M][N];int i,j,k;for(i=0;i<N;i++){ printf(“请输入第%d行%d个整数:”,i+1,M);for(j=0;j<M;j++)scanf(“%d”,&a[i][j]);} printf(“原始数组:\\n”);for(i=0;i<N;i++){ for(j=0;j<M;...

C语言程序设计 在n行n列的矩阵中,每行都有最大的数,程序求n个最大数...
设这个矩阵为double a[N][N] 那测试函数写为 double minmax(double a[N][N]) { double dmax[N]; double dmin; int i,j; for(i = 0; i < N; i++) { dmax[i] = a[i][0]; for(j = 1; j < N; j++) { dmax[i] = dmax[i] > a[i][j]? dmax[i] : a[i][j...

相似回答