august 发表于 2007-4-16 17:29:20

用指针实现排序问题

程序如下:(用的是冒泡排序法)
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++)应该如何理解呢?

Saiholmes 发表于 2007-4-16 17:47:49

p1 = array
p2<array+n-p1
p2<array+n-array???
p2<n

august 发表于 2007-4-16 17:50:16

引用第1楼Saiholmes于2007-04-16 17:47发表的:
p1 = array
p2<array+n-p1
p2<array+n-array???
p2<n



能否加点文字说明啊。。。。。。。

Saiholmes 发表于 2007-4-16 17:51:27

你先解释下你那个p2<array+n-p1的意思...

lw 发表于 2007-4-16 21:16:32

在函数中,int array[] 实际上已经退化为 int* array了……

所以其实就是 指针的比较咯^^

不过AU大写的也真是怪怪的……

lw 发表于 2007-4-16 21:20:08

原来程序的本意是:先从头开始排序,每次把最开头的那个数字和剩下的所有数字比较,结果可以找到所有数字中最小的那个,然后从剩下的部分继续寻找第二个最小的……
第一个循环是让p1指向需要放置最小数据的位子,然后p2从这个数字开始找,两两比较,把最小的数据放到第一个位子上面去……
所以类似于:
array (p1的第一个位置) 和所有array比较,然后最小的放到array
接下来p1指向第二个位置,重复以上步骤……

august 发表于 2007-4-17 16:57:49

如果不是用指针表示的话,就是大概这样
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   也是根据这个演变来的

august 发表于 2007-4-17 17:01:01

引用第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就是每一轮里面所比较的次数
.......

Saiholmes 发表于 2007-4-18 12:38:24

那个是指针...那样转换是不行的...
使用方式不同丫...
页: [1]
查看完整版本: 用指针实现排序问题