回 帖 发 新 帖 刷新版面

主题:指针排序

原题就是要求用指针把三个数从小到大排序,我是这样写的
/*#include<stdio.h>
void main()
{
    int a[3],*p,i,j,temp;
    p=&a[0];
    printf("请输入三个整数:\n");
    for(i=0;i<3;i++)
        scanf("%d",&a[i]);
    for(j=0;j<2;j++)
        for(i=0;i<3;i++)
            if(*(p+i)>*(p+i+1))
            {temp=*(p+i);
            *(p+i)=*(p+i+1);
            *(p+i+1)=temp;
            }
for(i=0;i<3;i++)
    printf("%4d",a[i]);
printf("\n");
}
可是我觉得我用的算法还是冒泡排序,只是形式上变了一下,然后书上参考答案是

#include<stdio.h>
void main()
{
    void swap(int *p1,int *p2);
    int n1,n2,n3;
    int *p1,*p2,*p3;
    printf("Input three integer n1,n2,n3:\n");
    scanf("%d%d%d",&n1,&n2,&n3);
    p1=&n1;
    p2=&n2;
    p3=&n3;
    if(n1>n2)swap(p1,p2);
    if(n1>n3)swap(p1,p3);
    if(n2>n3)swap(p2,p3);
printf("Now ,the order is:%d,%d,%d\n",n1,n2,n3);
}
void swap(int *p1,int *p2)
{int p;
p=*p1;*p1=*p2;*p2=p;
}
想问的是,依答案这种算法,若是排n个,该怎么办呢?要不要用指针数组或是指针的指针啊?

谢谢各位教我一下啦~






回复列表 (共5个回复)

沙发

这样有时间,你给我你的QQ到时候遇到不同的问题咱么俩讨论下怎么样???我也是一个C语言初学者!!!   我从这道题上看我,我个人认为 可以用指针和调用子函数的办法,同时也用冒泡法,这样也可以行的通的,我也试过,好像也是可以的,你这道题有点像那个C语言程序设计第2版的那个单元测试题!!!  你如果看了我的回帖,通知我一下,或者,你加我,我的QQ是751536189   呵呵

板凳

谢谢你啊~只是我一般不加陌生人的~呵呵,见谅~

3 楼

对于可变长度的问题,肯定要到特定的排序算法,用一个申请连续空间的指针来保存数据(其实就是数组),然后保留swap函数用来交换变量。以上。

4 楼

另外,对于指向连续空间的指针,如果不考虑给其他人的可读性的话,那么形如数组一样地使用是比较容易调试也不太容易出错误的方式。

5 楼

你好.我是全职网赚工作者.
如果你有时间有电脑.
想在网络上创业.请联系我..
项目绝对真实.详情QQ空间资料
加盟请联系 QQ908889846

我来回复

您尚未登录,请登录后再回复。点此登录或注册