帮我看看快速排序的结果吧!
请帮忙看看用下面这段算法实现对序列{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; }
[解决办法]
[解决办法]