用指针实现排序问题
程序如下:(用的是冒泡排序法)main()
{
void sort(int array[],int n);
int data,*p,i;
printf("input 10 number\n");
for(i=0;i<10;i++)
scanf("%d",&data);
printf(" the original array is:");
for(p=data;p<data+10;p++)
{
if((p-&data)%5==0) printf("\n");
printf("%d",*p);
}
sort(data,10);
printf("\n the present array is:");
for(p=data;p<data+10;p++)
{
if((p-&data)%5==0) printf("\n");
printf("%5d",*p);
}
}
void sort(int array[],int n)
{
int *p1,*p2,temp;
for(p1=array;p1<array+(n-1);p1++)
for(p2=p1+1;p2<array+n;p2++)
if(*p1>*p2)
{
temp=*p1;
*p1=*p2;
*p2=temp;
}
}
我是不明白它最后那个循环,我自己写的话,是写成这样for(p2=p1;p2<array+n-p1;p2++)
而原程序中的for(p2=p1+1;p2<array+n;p2++)应该如何理解呢?
p1 = array
p2<array+n-p1
p2<array+n-array???
p2<n
引用第1楼Saiholmes于2007-04-16 17:47发表的:
p1 = array
p2<array+n-p1
p2<array+n-array???
p2<n
能否加点文字说明啊。。。。。。。 你先解释下你那个p2<array+n-p1的意思... 在函数中,int array[] 实际上已经退化为 int* array了……
所以其实就是 指针的比较咯^^
不过AU大写的也真是怪怪的…… 原来程序的本意是:先从头开始排序,每次把最开头的那个数字和剩下的所有数字比较,结果可以找到所有数字中最小的那个,然后从剩下的部分继续寻找第二个最小的……
第一个循环是让p1指向需要放置最小数据的位子,然后p2从这个数字开始找,两两比较,把最小的数据放到第一个位子上面去……
所以类似于:
array (p1的第一个位置) 和所有array比较,然后最小的放到array
接下来p1指向第二个位置,重复以上步骤…… 如果不是用指针表示的话,就是大概这样
for(i=1;i<n-1;i++)
for(j=0;j<n-i;j++)
printf("XXXXXX");
n是总的元素个数,n-1就表示这比较一共进行多少轮,n-i就是每一轮里面所比较的次数
而我上面的p2<array+n-p1 也是根据这个演变来的 引用第6楼august于2007-04-17 16:57发表的:
如果不是用指针表示的话,就是大概这样
for(i=1;i<n-1;i++)
for(j=0;j<n-i;j++)
printf("XXXXXX");
n是总的元素个数,n-1就表示这比较一共进行多少轮,n-i就是每一轮里面所比较的次数
....... 那个是指针...那样转换是不行的...
使用方式不同丫...
页:
[1]