c语言给定二维整型数组先对每行从小到大排序,后对每列从小到大排序反复执行,每行不低于3列不低于4

 我来答
自我编程
2018-12-11 · 科技优质答主
自我编程
采纳数:1481 获赞数:4283

向TA提问 私信TA
展开全部

二维数组我直接赋的初值。数组的行数和列数你改常量就行了。

你想手动输入数组值,你自己写一个输入就行了。

代码功能:先对每行进行一次升序排列,再对每列进行一次升序排列。无限循环直到数组不再发生变动。

也就是说,至少会有两轮行列排序检测。

#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;
}
岔路程序缘

2018-12-11 · TA获得超过8.9万个赞
知道大有可为答主
回答量:9918
采纳率:93%
帮助的人:3385万
展开全部
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");}}}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
谀辩护概
2018-12-11 · 超过26用户采纳过TA的回答
知道答主
回答量:150
采纳率:40%
帮助的人:42.4万
展开全部
  第十二回:王熙凤毒设相思局,贾天祥正照风月鉴
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式