幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2692|回复: 8

[通用编程] 用指针实现排序问题

[复制链接]

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
发表于 2007-4-16 17:29:20 | 显示全部楼层 |阅读模式
程序如下:(用的是冒泡排序法)
main()
{
    void sort(int array[],int n);
    int data[10],*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[0])%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[0])%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++)  应该如何理解呢?
[s:6]
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复

使用道具 举报

88

主题

5419

帖子

214748万

积分

版主

S素世上最伟大最华丽

Rank: 7Rank: 7Rank: 7

积分
2147483647
QQ
发表于 2007-4-16 17:47:49 | 显示全部楼层
p1 = array
p2<array+n-p1
p2<array+n-array  ???
p2<n
[s:3]
回复 支持 反对

使用道具 举报

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
 楼主| 发表于 2007-4-16 17:50:16 | 显示全部楼层
引用第1楼Saiholmes2007-04-16 17:47发表的:
p1 = array
p2<array+n-p1
p2<array+n-array  ???
p2<n
[s:3]


能否加点文字说明啊。。。。。。。 [s:6]  [s:6]  [s:6]
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复 支持 反对

使用道具 举报

88

主题

5419

帖子

214748万

积分

版主

S素世上最伟大最华丽

Rank: 7Rank: 7Rank: 7

积分
2147483647
QQ
发表于 2007-4-16 17:51:27 | 显示全部楼层
你先解释下你那个p2<array+n-p1的意思...
回复 支持 反对

使用道具 举报

50

主题

742

帖子

402

积分

版主

自定义头衔

Rank: 7Rank: 7Rank: 7

积分
402
发表于 2007-4-16 21:16:32 | 显示全部楼层
在函数中,int array[] 实际上已经退化为 int* array了……

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

不过AU大写的也真是怪怪的…… [s:5]
Style-C
回复 支持 反对

使用道具 举报

50

主题

742

帖子

402

积分

版主

自定义头衔

Rank: 7Rank: 7Rank: 7

积分
402
发表于 2007-4-16 21:20:08 | 显示全部楼层
原来程序的本意是:先从头开始排序,每次把最开头的那个数字和剩下的所有数字比较,结果可以找到所有数字中最小的那个,然后从剩下的部分继续寻找第二个最小的……
第一个循环是让p1指向需要放置最小数据的位子,然后p2从这个数字开始找,两两比较,把最小的数据放到第一个位子上面去……
所以类似于:
array[0] (p1的第一个位置) 和所有array[1...n]比较,然后最小的放到array[0]
接下来p1指向第二个位置,重复以上步骤…… [s:5]
Style-C
回复 支持 反对

使用道具 举报

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
 楼主| 发表于 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   也是根据这个演变来的
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复 支持 反对

使用道具 举报

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
 楼主| 发表于 2007-4-17 17:01:01 | 显示全部楼层
引用第6楼august2007-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就是每一轮里面所比较的次数
.......
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复 支持 反对

使用道具 举报

88

主题

5419

帖子

214748万

积分

版主

S素世上最伟大最华丽

Rank: 7Rank: 7Rank: 7

积分
2147483647
QQ
发表于 2007-4-18 12:38:24 | 显示全部楼层
那个是指针...那样转换是不行的...
使用方式不同丫...
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-5-4 01:53 , Processed in 0.027320 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表