| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 314 人关注过本帖
标题:请教一个阵列排序的问题
只看楼主 加入收藏
douglas
Rank: 1
等 级:新手上路
帖 子:5
专家分:7
注 册:2010-7-22
收藏
 问题点数:0 回复次数:1 
请教一个阵列排序的问题
是不是分少啦。我第一次发贴还不是很懂
5*5的矩阵。四个角分别放最小的元素(顺序为从左到右,从上到下依次从小到大放)。中间放最大的值。
原来的
35 34 33 32 31
30 29 28 27 26
25 24 23 22 21
20 19 18 17 16
15 14 13 12 11
变化后应该是
11 34 33 32 12
30 29 28 27 26
25 24 35 22 21
20 19 18 17 16
13 23 15 31 14。

#include<stdio.h>
void main()
{
    void change(int *);
    int a[5][5]={35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11},*p,i,j;
    printf("original array:\n");
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        printf("%5d",a[i][j]);
        printf("\n");
    }
    p=&a[0][0];
    change(p);
    printf("Now array:\n");
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        printf("%5d",a[i][j]);
        printf("\n");
    }
}
void change(int *p)
{
    int *pmax,*pmin;
    int t,i,j;
    pmax=p;
    pmin=p;
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        if(*pmax<*(p+5*i+j))pmax=p+5*i+j;
        if(*pmin>*(p+5*i+j))pmin=p+5*i+j;
    }
    t=*pmax;
    *pmax=*(p+12);
    *(p+12)=t;
    t=*pmin;
    *pmin=*p;
    *p=t;
    pmin=p+1;
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        if(((p+5*i+j)!=p)&&(*(p+5*i+j)<*pmin))pmin=p+i*5+j;
    }
    t=*pmin;
    *pmin=*(p+4);
    *(p+4)=t;
    pmin=p+1;
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        if(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&(*(p+5*i+j)<*pmin))pmin=p+i*5+j;
    }
    t=*pmin;
    *pmin=*(p+20);
    *(p+20)=t;
    pmin=p+1;
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        if(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&((p+i*5+j)!=(p+20))&&(*(p+5*i+j)<*pmin))pmin=p+i*5+j;
    }
    t=*pmin;
    *pmin=*(p+24);
    *(p+24)=t;
}
怎么看都看不出问题所在啊。请教高手啊

[ 本帖最后由 douglas 于 2010-7-30 11:06 编辑 ]
2010-07-30 10:32
chaoi
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-8-16
收藏
得分:0 
#include<stdio.h>
void main()
{
    void change(int *);
    int a[5][5]={35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11},*p,i,j;
    printf("original array:\n");
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        printf("%5d",a[i][j]);
        printf("\n");
    }
    p=&a[0][0];
    change(p);
    printf("Now array:\n");
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        printf("%5d",a[i][j]);
        printf("\n");
    }
}
void change(int *p)
{
    int *pmax,*pmin;
    int t,i,j;
    pmax=p;
    pmin=p;
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        if(*pmax<*(p+5*i+j))
           pmax=p+5*i+j;
       else if(*pmin>*(p+5*i+j))
              pmin=p+5*i+j;
    }
    t=*pmax;
    *pmax=*(p+12);
    *(p+12)=t;
    t=*pmin;
    *pmin=*p;
    *p=t;
    pmin=p+1;
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        if(((p+5*i+j)!=p)&&(*(p+5*i+j)<*pmin))pmin=p+i*5+j;
    }
    t=*pmin;
    *pmin=*(p+4);
    *(p+4)=t;
    pmin=p+1;
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        if(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&(*(p+5*i+j)<*pmin))pmin=p+i*5+j;
    }
    t=*pmin;
    *pmin=*(p+20);
    *(p+20)=t;
    pmin=p+1;
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        if(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&((p+i*5+j)!=(p+20))&&(*(p+5*i+j)<*pmin))pmin=p+i*5+j;
    }
    t=*pmin;
    *pmin=*(p+24);
    *(p+24)=t;
}
你编译执行一下

[ 本帖最后由 chaoi 于 2010-8-17 09:05 编辑 ]
2010-08-17 09:03
快速回复:请教一个阵列排序的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026558 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved