+ -
当前位置:首页 → 问答吧 → 谢谢高手解答!高手们出来帮忙啊!

谢谢高手解答!高手们出来帮忙啊!

时间: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会放入栈中)吗?
问题有点多,因为我不明白在遇到不同的递归时,到底哪些需要放入栈中,顺序如何,递归返回后,应该用哪个数据去继续执行。看书看不明白,不能深入理解执行过程,所以求教高手帮我一下。感激不尽!!

作者: z5264   发布时间: 2011-08-22

你这些变量都是函数里的局部变量,肯定都是放在栈中的,只有当函数递归到底部,开始返回时,才开始一一弹栈。
至于用图形理解qs,最好的方式就是自己画图理解递归调用的过程,我好像看过,任意一本讲数据结构或者算法的书里,都有图形介绍递归调用的展开过程

作者: yby4769250   发布时间: 2011-08-22

热门下载

更多