+ -
当前位置:首页 → 问答吧 → 帮我看看快速排序的结果吧!

帮我看看快速排序的结果吧!

时间:2011-11-11

来源:互联网

请帮忙看看用下面这段算法实现对序列{49,38,65,97,76,13,27,49}进行快速排序的第一轮排序后的结果吧,谢谢!请尽量写出中间的交换过程。
template<class Type>
int Partition(Type a[],int p,int r)
{
int i=p;
int j=r+1;
Type x=a[p];
while(true)
{
while(a[++i]<x&&i<r);
while(a[--j]>x);
if(i>=j)break;
Swap(a[i],a[j]);
}
a[p]=a[j];
a[j]=x;
return j;
}
另外,想问快速排序如果写的算法不同的话,是不是中间交换过程是不一样的呢?

作者: iamzyj   发布时间: 2011-11-11

划分的具体过程找本严蔚敏数据结构书看一下。

另外,想问快速排序如果写的算法不同的话,是不是中间交换过程是不一样的呢?
=====
恩,是的。除了你那种划分,还有一种:
C/C++ code

int partition(int* ptr, int beg, int end)
{
    int povit = ptr[beg];

    int h = beg;

    for (int k=h; k<=end; k++)
    {
        if (ptr[k] < povit)
        {
            h = h+1;
            swap(ptr[h], ptr[k]);
        }
    }
    swap( ptr[h], ptr[beg] );

    return h;
}

int double_partition(int* ptr, int beg, int end)
{
    int h = beg;
    int k = end;

    int povit = ptr[beg];

    while ( h < k)
    {
        while (h < k && ptr[k] > povit)
            --k;
        
        ptr[h] = ptr[k];

        while (h < k && ptr[h] < povit)
            ++h;

        ptr[k] = ptr[h];
    }
    
    ptr[h] = povit;

    return h;    
}



具体参见:http://blog.csdn.net/dizuo/article/details/6063780

作者: dizuo   发布时间: 2011-11-12

我看严蔚敏的数据结构对快速排序算法的描述是这样的:
排序过程:对r[s……t]中记录进行一趟快速排序,附设两个指针i和j,设枢轴记录rp=r[s],x=rp.key
初始时令i=s,j=t
首先从j所指位置向前搜索第一个关键字小于x的记录,并和rp交换
再从i所指位置起向后搜索,找到第一个关键字大于x的记录,和rp交换
重复上述两步,直至i==j为止
再分别对两个子序列进行快速排序,直到每个子序列只含有一个记录为止

这个算法和第一个帖子中的算法好象不一样,排序的中间过程不一样吧?求解答!多谢!

作者: iamzyj   发布时间: 2011-11-12

热门下载

更多