读书人

帮小弟我看看快速排序的结果吧

发布时间: 2012-02-26 20:19:43 作者: rapoo

帮我看看快速排序的结果吧!
请帮忙看看用下面这段算法实现对序列{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;
}
另外,想问快速排序如果写的算法不同的话,是不是中间交换过程是不一样的呢?

[解决办法]
划分的具体过程找本严蔚敏数据结构书看一下。

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

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;    }
[解决办法]
探讨

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

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

读书人网 >软件架构设计

热点推荐