c语言给定二维整型数组先对每行从小到大排序,后对每列从小到大排序反复执行,每行不低于3列不低于4
3个回答
展开全部
二维数组我直接赋的初值。数组的行数和列数你改常量就行了。
你想手动输入数组值,你自己写一个输入就行了。
代码功能:先对每行进行一次升序排列,再对每列进行一次升序排列。无限循环直到数组不再发生变动。
也就是说,至少会有两轮行列排序检测。
#include<stdio.h>
#include<malloc.h>
#define row 3
#define clo 4
int px(int **ns,int len);//对数组升序排列
void printfNUMS(int *nums,int r,int c);//打印数组
int main()
{
int i,j,flag=0,cnt=0,nums[row][clo]={{4,6,2,8},{4,8,3,2},{9,8,6,4}},**ns=NULL;
printf("原始的数组:\n");
printfNUMS(&nums[0][0],row,clo);
while(1)
{
flag=0;
cnt++;
ns=(int **)malloc(sizeof(int *)*clo);
if(!ns)
{
printf("内存错误!\n");
return 1;
}
printf("第%d次对分别对行列进行升序排列\n",cnt);
for(i=0;i<row;i++)//对每行进行排序
{
for(j=0;j<clo;j++)
ns[j]=&nums[i][j];
if(px(ns,clo))
flag=1;
}
printf("--每行进行一次排序,数组变成:\n");
printfNUMS(&nums[0][0],row,clo);
free(ns);
ns=(int **)malloc(sizeof(int *)*row);
if(!ns)
{
printf("内存错误!\n");
return 1;
}
for(i=0;i<clo;i++)//对每列进行排序
{
for(j=0;j<row;j++)
ns[j]=&nums[j][i];
if(px(ns,row))
flag=1;
}
printf("--每列进行一次排序,数组变成:\n");
printfNUMS(&nums[0][0],row,clo);
printf("\n");
if(!flag)
break;
}
printf("数组行列均已实现升序排列!程序结束\n");
return 0;
}
void printfNUMS(int *nums,int r,int c)//打印数组,传参首地址
{
int i,j;
for(i=0;i<r;i++)//对每行进行排序
{
for(j=0;j<c;j++)
printf("%d ",*nums++);
printf("\n");
}
}
int px(int **ns,int len)//对数组(指针数组)升序排列,如果发送交换返回1,没有返回0
{
int i,j,flag=0;
for(i=0;i<len;i++)
for(j=i+1;j<len;j++)
if(*ns[i]>*ns[j])
*ns[i]^=*ns[j],*ns[j]^=*ns[i],*ns[i]^=*ns[j],flag=1;
return flag;
}
展开全部
main()
{int a[100][100],m,n,i,j,k,t,rd;
scanf("%d%d",&m,&n);
if(m>=3&&n>=4)
{for(i=0;i<m;i++)
for(j=0;j<n;j++)scanf("%d",&a[i][j]);
while(1)
{for(i=0;i<m;i++)
for(j=0;j<n-1;j++)
for(k=j+1;k<n;k++)
if(a[i][j]>a[i][k])
t=a[i][j],a[i][j]=a[i][k],a[i][k]=t;
for(j=0;j<n;j++)
for(i=0;i<m-1;i++)
for(k=i+1;k<m;k++)
if(a[i][j]>a[k][j])
t=a[i][j],a[i][j]=a[k][j],a[k][j]=t;
for(i=0;i<m;i++)
for(j=0;j<n-1;j++)
if(a[i][j]>a[i][j+1])continue;
break;}
for(i=0;i<m;i++)
{for(j=0;j<n;j++)
printf("%5d",a[i][j]);
printf("\n");}}}
{int a[100][100],m,n,i,j,k,t,rd;
scanf("%d%d",&m,&n);
if(m>=3&&n>=4)
{for(i=0;i<m;i++)
for(j=0;j<n;j++)scanf("%d",&a[i][j]);
while(1)
{for(i=0;i<m;i++)
for(j=0;j<n-1;j++)
for(k=j+1;k<n;k++)
if(a[i][j]>a[i][k])
t=a[i][j],a[i][j]=a[i][k],a[i][k]=t;
for(j=0;j<n;j++)
for(i=0;i<m-1;i++)
for(k=i+1;k<m;k++)
if(a[i][j]>a[k][j])
t=a[i][j],a[i][j]=a[k][j],a[k][j]=t;
for(i=0;i<m;i++)
for(j=0;j<n-1;j++)
if(a[i][j]>a[i][j+1])continue;
break;}
for(i=0;i<m;i++)
{for(j=0;j<n;j++)
printf("%5d",a[i][j]);
printf("\n");}}}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第十二回:王熙凤毒设相思局,贾天祥正照风月鉴
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询