谢谢高手解答!高手们出来帮忙啊!
时间:2011-08-22
来源:互联网
void QuickSorter<Record,Compare>::Sort(Record Array[],int left,int right)
{
//快速排序,Array[]为待排序数组,i,j分别为数组两端
if(right<=left) //如过子序列中只有0或1个记录,就不需排序
return;
int pivot=SelectPivot(left,right); //选择轴值
swap(Array,pivot,right); //分割前先将轴值放到数组末端
pivot=Partition(Array,left,right); //对剩余的记录进行分割
Sort(Array,left,pivot-1); //对轴值左边的子序列进行递归快速排序
Sort(Array,pivot+1,right); //对轴值右边的子序列进行递归快速排序
}
能不能告诉我这些代码中哪些变量,实参需要放入栈中,在栈中的顺序是怎样的,最好有图,好理解些。假如执行Sort(Array[8],0,7),会把Array[8]、0、7放入栈中吗?它下面的pivot,pivot=Partition()会放入栈中吗?执行第二个Sort()时,它下面的pivot,pivot=Partition()会放入栈中吧。pivot第二个会在栈中覆盖第一个pivot(如果pivot会放入栈中)吗?
问题有点多,因为我不明白在遇到不同的递归时,到底哪些需要放入栈中,顺序如何,递归返回后,应该用哪个数据去继续执行。看书看不明白,不能深入理解执行过程,所以求教高手帮我一下。感激不尽!!
{
//快速排序,Array[]为待排序数组,i,j分别为数组两端
if(right<=left) //如过子序列中只有0或1个记录,就不需排序
return;
int pivot=SelectPivot(left,right); //选择轴值
swap(Array,pivot,right); //分割前先将轴值放到数组末端
pivot=Partition(Array,left,right); //对剩余的记录进行分割
Sort(Array,left,pivot-1); //对轴值左边的子序列进行递归快速排序
Sort(Array,pivot+1,right); //对轴值右边的子序列进行递归快速排序
}
能不能告诉我这些代码中哪些变量,实参需要放入栈中,在栈中的顺序是怎样的,最好有图,好理解些。假如执行Sort(Array[8],0,7),会把Array[8]、0、7放入栈中吗?它下面的pivot,pivot=Partition()会放入栈中吗?执行第二个Sort()时,它下面的pivot,pivot=Partition()会放入栈中吧。pivot第二个会在栈中覆盖第一个pivot(如果pivot会放入栈中)吗?
问题有点多,因为我不明白在遇到不同的递归时,到底哪些需要放入栈中,顺序如何,递归返回后,应该用哪个数据去继续执行。看书看不明白,不能深入理解执行过程,所以求教高手帮我一下。感激不尽!!
作者: z5264 发布时间: 2011-08-22
你这些变量都是函数里的局部变量,肯定都是放在栈中的,只有当函数递归到底部,开始返回时,才开始一一弹栈。
至于用图形理解qs,最好的方式就是自己画图理解递归调用的过程,我好像看过,任意一本讲数据结构或者算法的书里,都有图形介绍递归调用的展开过程
至于用图形理解qs,最好的方式就是自己画图理解递归调用的过程,我好像看过,任意一本讲数据结构或者算法的书里,都有图形介绍递归调用的展开过程
作者: yby4769250 发布时间: 2011-08-22
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28