帮我看看快速排序的结果吧!
时间: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;
}
另外,想问快速排序如果写的算法不同的话,是不是中间交换过程是不一样的呢?
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
具体参见:http://blog.csdn.net/dizuo/article/details/6063780
另外,想问快速排序如果写的算法不同的话,是不是中间交换过程是不一样的呢?
=====
恩,是的。除了你那种划分,还有一种:
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为止
再分别对两个子序列进行快速排序,直到每个子序列只含有一个记录为止
这个算法和第一个帖子中的算法好象不一样,排序的中间过程不一样吧?求解答!多谢!
排序过程:对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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28