主题:指针排序
原题就是要求用指针把三个数从小到大排序,我是这样写的
/*#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个,该怎么办呢?要不要用指针数组或是指针的指针啊?
谢谢各位教我一下啦~
/*#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个,该怎么办呢?要不要用指针数组或是指针的指针啊?
谢谢各位教我一下啦~