标题:排序问题??
只看楼主
现龙
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2010-3-28
结帖率:80%
已结贴  问题点数:10 回复次数:12 
排序问题??
#include "stdio.h"
void scan(int a[10])
{
    int *p,i;
    p=a;
    for(i=0;i<10;i++,p++)
    scanf("%d",p);
    printf("\n");
}
void compare(int a[10])
{
    int *p=a,i,*min,*max,x,y;
    *min=a[0];
    *max=a[9];
    for(i=0;i<10;i++,p++)
    {
        if(*min>*p)
        {
            x=*min;
            *min=*p;
            *p=x;
        }
        if(*max>*p)
        {
            y=*max;
            *max=*p;
            *p=y;
        }
    }
}
void print(int a[10])
{
    int *p=a,i;
    for(i=0;i<10;i++,p++)
    printf("%3d",*p);
}
void main()
{
    int a[10];
    scan(a);
    compare(a);
    print(a);
}

三个函数,分别是输入,比较和输出!
比较是最小的为第一个,最大的为第十个!
不知道那里错了。请大家赐教!!
搜索更多相关主题的帖子: max void compare include 
2010-05-09 20:17
现龙
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2010-3-28
得分:0 
来人啊!!
2010-05-09 21:07
shuijiashui
Rank: 2
等 级:论坛游民
帖 子:43
专家分:85
注 册:2009-9-1
得分:1 
是不是结果不对,你这种算法错误,还有这种简单比较就使用指针 建议不要随便用指针;
#include "stdafx.h"
void scan(int a[10])
{
    int i;
   
    for(i=0;i<10;i++)
    scanf("%d",&a[i]);
    printf("\n");
}
void compare(int a[10])
{
    int i,j,k,t;
    for(i=0;i<9;i++)
    {
        k=i;
        for(j=i+1;j<10;j++)
        if(a[i]>a[j])
        {
           k=j;
        }
        if(k!=i)
        {
           t=a[i];
           a[i]=a[k];
           a[k]=t;
        }
    }
}
void print(int a[10])
{
    int i;
    for(i=0;i<10;i++)
    printf("%3d",a[i]);
}



int main(int argc, char* argv[])
{
   int a[10];
    scan(a);
    compare(a);
    print(a);
}
2010-05-10 00:28
现龙
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2010-3-28
得分:0 
回复 3楼 shuijiashui
我也不是想使用指针,是老师规定要使用指针的
兄弟,还是用回指针的方法解决问题吧!
2010-05-10 00:31
暗留香
Rank: 2
等 级:论坛游民
帖 子:49
专家分:75
注 册:2009-9-4
得分:1 
算法有问题,你看啊我举个列子:
1,5,9,2,8,6,4,7,3,0
循环1:1,5,9,2,8,6,4,7,3,0
1>1,0>1不成立
*p指向5
循环2:1,5,9,2,8,6,4,7,3,0
1>5,0>5不成立
*p指向9
...........
即使写成1,5,0,2,8,6,4,7,3,9
也只是把数字9从头移动到尾而已.
没见过多数排序只用一重循环就解决了的.

既然你喜欢用指针.那就:

void scan(int a[10])
{
    int i,*p=a;
   
    for(i=0;i<10;i++)
    scanf("%d",p++);
}
void compare(int a[10])
{
    int i,j,*p=a,t;
    for(i=0;i<9;i++)
    {
        for(j=i+1;j<10;j++)
         if(*(p+i)>*(p+j))
         {
         t= *(p+i);
         *(p+i)=*(p+j);
         *(p+j)=t;
         }

    }
}
void print(int a[10])
{
    int i,*p=a;
    for(i=0;i<10;i++)
    printf("%3d",*p++);
}



main()
{
   int a[10];
    scan(a);
    compare(a);
    print(a);
    getch();
}
2010-05-10 03:57
aiyinsitan
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:183
专家分:177
注 册:2010-4-22
得分:1 
#include "stdio.h"
#include "conio.h"
void scan(int a[10])
{
    int i,*p=a;
   
    for(i=0;i<10;i++)
    scanf("%d",a[i]);
}
void compare(int a[10])
{
    int i,j,*p=a,t;
    for(i=0;i<9;i++)
    {
        for(j=i+1;j<10;j++)
         if(*(p+i)>*(p+j))
         {
         t= *(p+i);
         *(p+i)=*(p+j);
         *(p+j)=t;
         }

    }
}
void print(int a[10])
{
    int i,*p=a;
    for(i=0;i<10;i++)
    printf("%3d",*p++);
}



main()
{
   int a[10];
    scan(a);
    compare(a);
    print(a);
    getch();
    return 0;
}
 同意楼上  要加个头文件才能执行
2010-05-10 07:20
现龙
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2010-3-28
得分:0 
回复 5楼 暗留香
我要的是最小的数根第一个数对换,最大的数与第十个对换。其他的都不变
2010-05-10 11:10
陈大师
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:231
专家分:1038
注 册:2009-11-4
得分:1 
冒泡排序+指针
2010-05-10 11:13
chenwar
Rank: 1
等 级:新手上路
帖 子:12
专家分:7
注 册:2010-5-8
得分:1 
这楼主整人啊  标题打出排序  后面又说 只要最大最小的数  白让人忙活啊
2010-05-10 11:16
chenwar
Rank: 1
等 级:新手上路
帖 子:12
专家分:7
注 册:2010-5-8
得分:0 
如果只是把最大 最小的数放到最后 和 最前,其他不变的话 就可以用下面的了 别的函数 可以跟6楼一样了
void compare(int a[10])
{
    int i,min,max,*p=a;
    min = p[0];
    max = p[10];
    for(i=0;i<=10;i++)
    {
        if(p[i]<min)
            min = p[i];
        if(p[1]>max);
            max = p[i];
     }
}


[ 本帖最后由 chenwar 于 2010-5-10 11:25 编辑 ]
2010-05-10 11:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-305980-1-1.html




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

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