C ++中的一些神秘堆栈机制

时间:2014-08-26 22:54:17

标签: c++ stack quicksort

在学习如何编写快速排序时,我遇到了一个对我来说非常不清楚的实现。这是它的开始:

void quick_sort_iterative(int start, int end)
{
    range stack[32]; // 1. why 32? why not 2? why not 1024? what is it?
    range * s = stack; // 2. just a simple pointer = an array?
    s->start = start; // 3. are these two values currently on top of the stack?
    s->end = end;
    s++; // 4. how does it work? it's pushing something on the stack?

    // sort as long as there are any ranges [start, end] to sort left
    while (s > stack) // 5. comparing a pointer and an array and it works?

有人可以解释一下这五件事吗? :)谢谢。

这是整个代码(页面上的最后一个代码,带有描述): code

2 个答案:

答案 0 :(得分:0)

因此。据推测,range是一个具有两个整数参数startend的对象。我说的不多。

  1. 无论出于何种原因,算法的设计者都认为他们不需要超过32个假堆栈帧。
  2. 数组衰减为指针。您可以将其视为&stack[0]
  3. s->start目前与s[0].start相同。
  4. s现在指向&stack[1]
  5. 数组衰减为指针。只要s未指向&stack[0]
  6. ,情况就是如此

答案 1 :(得分:0)

  1. 也许只是从他们的阴部区域中挑选出一个数字,或者通过仔细检查算法的最大堆栈深度来获得。我在猜测前者。
  2. 当在需要指针的上下文中使用时,任何数组变量都会自然衰减为指针。
  3. 如果你认为“堆叠”数组的第一个元素是顶部,那么是。
  4. 鉴于3中的假设,然后递增指针确实会移动到堆栈中的下一个元素。
  5. 参见2.推测循环正在递减s,并且当它再次到达堆栈顶部时它们想要停止。