| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 417 人关注过本帖
标题:关于快速排序的一些看法,欢迎一起讨论
只看楼主 加入收藏
alpp0521
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-8-16
收藏
 问题点数:0 回复次数:2 
关于快速排序的一些看法,欢迎一起讨论
排序方法很多,特点各异,学习之后呢,又总是记不住(也可能是我记性不好)。
静下心来,想想为什么我会记不住,可能是我在学习时,只是想着怎样按照书上给的方法去实现,通常是死记,而忽略了为什么要这样实现的基础性问题,以下是我对快速排序的一些看,欢迎大家一起讨论,加深理解。
按<<数据结构>>上所描述,实现如下方法:
void quicksort(int *,int,int);

main()
{
 int sort[10]={8,6,1,0,3,0,4,2,7,9};
 int i;

 /*快速排序*/
 quicksort(sort,0,9);

/*打印排序后的sort数组*/
 for(i=0;i<10;i++)
 printf("%d ",sort[i]);
 putchar('\n');
}

void quicksort(int *sort,int i,int j)
{
 int low=i;
 int high=j;
 int t,key=sort[low];/*key值一般是待排序数组的第一个元素*/

 while(low < high)
    {
        /*从高位开始,向前搜索小于KEY的值*/
        while(sort[high] >= key)
        {
            if(low >= high)
                break;
            else
                high--;
        }

        /*从低位开始,向后搜索大于KEY的值*/
        while(sort[low] <= key)
        {
            if(low >= high)
                break;
            else
                low++;
        }

        if(low < high)
        {
            t = sort[high];
            sort[high]=sort[low];
            sort[low]=t;
        }
        else
        {
            sort[i]=sort[low];
            sort[low]=key;

            quicksort(sort,i,low-1);
            quicksort(sort,low+1,j);
        }
    }
}
我提两个自己的问题,和对这些问题的理解:
问题1、为什么一定先从高位high向前搜索,再由低位low向后搜索?个人认为,先由high向前搜索会出现三种情况
    情况1:从high向前搜索到比KEY小的值,并且从low向后搜索到比KEY大的值,这时low<high,交换sort[high]和sort[low]。
    情况2:从high向前搜索到比KEY小的值,但从low向后没有搜索到比KEY大的值,这时low==high、key<sort[low],交换sort[low]和key的值。
    情况3:从high向前没有搜索到比KEY小的值(KEY就是最小值),这时low==high、sort[low]==sort[high]==key。
   
    总结:对于情况2和情况3可以统一处理(当low==high,交换key和sort[low]的值,并重新递归调用快速排序函数)。

问题2、为什么不能先由低位low向后搜索,再从高位high向前搜索?个人认为,先由low向后搜索会出现三种情况,:
    情况1:从low向后搜索到比KEY大的值,并且从high向前搜索到比KEY小的值,这时low<high,交换sort[high]和sort[low]。
    情况2:从low向后搜索到比KEY大的值,但从high向前没有搜索到比KEY小的值,这时low==high、key<sort[low]。
    情况3:从low向后没有搜索到比KEY大的值(KEY就是最大值),这时low==high,交换KEY和sort[high]。

    总结:对于情况2和情况3不能统一处理。



2011-01-25 16:00
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
个人感觉无所谓。不过没细想过这个问题,我一直以 为这么做是历史原因。比如发明这个算法,或者某个很经典的实现是这么做的而已。
2011-02-06 11:18
CCFzeroOH
Rank: 2
等 级:论坛游民
帖 子:79
专家分:85
注 册:2009-12-22
收藏
得分:0 
lz分析得不错
2011-02-13 19:49
快速回复:关于快速排序的一些看法,欢迎一起讨论
数据加载中...
 
   



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

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