| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1069 人关注过本帖
标题:请教快速排序法的问题
取消只看楼主 加入收藏
tjxix
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-10-3
收藏
 问题点数:0 回复次数:2 
请教快速排序法的问题
书上有个例子,但其中有两句看不太明白,已在注释中说明,麻烦大家指点一下。谢谢!

//快速排序例子如下

#include <istream.h>

void qsort(int[],int,int);

void main()
{
        int a[]={55,2,6,4,32,12,9,73,26,37};
        int len=sizeof(a)/sizeof(int);
        qsort(a,0,len-1);
        for(int i=0;i<len;i++)
                cout<<a[i];
}
void qsort(int a[],int left,int right)
{
        int pivot,l,r,temp;
        l=left;
        r=right;
        pivot=a[(left+right)/2];
        ap=a[pivot]; /* */
        
        while(l<r)
        {
                while(a[l]<ap) ++l; /* */
                while(a[r]>ap) --r; /* */

                if(l>;=r) break;
               
                temp=a[l];
                a[l]=a[r];
                a[r]=temp;
                if(l!=pivot)--r;//这句和下面那句看不太明白,为啥是l不等于pivot的时候才--r?
                if(r!=pivot)++l;//和上句类同,为啥是r不等于pivot才执行++l啊?
        }
        if(l==r) l++;
        if(left<r) qsort(a,left,l-1);
        if(l<right) qsort(a,r+1,right);
}

// 想问一下,上面有注释所在的那两句中,执行++l和--r是不是为了避免遇到数组其他位置的元素等于a[pivot]时无法继续下去,不知道这样理解对吗?
// 但为什么要有l和r不等于pivot的条件?
// 谢谢!!


[[it] 本帖最后由 tjxix 于 2008-10-6 17:32 编辑 [/it]]
搜索更多相关主题的帖子: 快速排序 
2008-10-03 10:18
tjxix
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-10-3
收藏
得分:0 
[bo][un]nuciewth[/un] 在 2008-10-3 19:46 的发言:[/bo]

貌似你的程序很有问题,是个错误的程序。
因为你将数组下标和数组值进行了比较。我想本意应该pivot是数组的中间位置


改了一次还没改对,再次更正:
应该是前面加上一句:ap=a[pivot];/* */
后面那两句应该如下:
                while(a[l]<ap) ++l; /* */
                while(a[r]>ap) --r; /* */

还望大家指点最后有注释问题的那两句,谢谢!

[[it] 本帖最后由 tjxix 于 2008-10-6 17:35 编辑 [/it]]
2008-10-03 22:30
tjxix
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-10-3
收藏
得分:0 
感谢ls的xd!
这个版本比我那书上思路清晰多了。
这个版本每轮比较的基值是取的最左端的元素。书上的是取中间位置的。如果我能把书上那个读懂就更好了。
谢谢!!

[[it] 本帖最后由 tjxix 于 2008-10-6 18:06 编辑 [/it]]
2008-10-06 17:59
快速回复:请教快速排序法的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035913 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved