按降序排序堆栈

时间:2016-08-30 15:28:20

标签: c algorithm sorting

我在按降序排序堆栈时遇到问题,排序在另一个堆栈的帮助下工作。

这是排序代码:

void* sort(stack_type* stack, stack_type* auxiliary) {
  int* element = NULL;
  while(!is_empty(stack)) {
    element = pop(stack);
    while(!is_empty(auxiliary) && head(auxiliary) > element) {
      push(pop(auxiliary), stack);
    }
    push(element, auxiliary);
  }
}

因此输出:

|   -4  |
|   -45 |
|   356 |
|   87  |
|   76  |
|   54  |
|   34  |
|   22  |
|   8   |
|   2   |

但我想要:

|   356 |
|   87  |
|   76  |
|   54  |
|   34  |
|   22  |
|   8   |
|   2   |
|   -4  |
|   -45 |

这里是完整代码的要点:https://gist.github.com/avoxy/380e96a87cb3c6cc1f4a62c02fb6428d

thx guys

2 个答案:

答案 0 :(得分:0)

您按指针排序,而不是通过指向的值排序。事实上,在这种情况下,你没有指向值,这就产生了为什么要使用指针的问题。无论如何,这是一段有问题的代码:

push((int*) -45, stack);

指针大多不是负面的。因此,此转换将导致下溢,并且根据您的编译器,将导致大的正指针。因此,此指针将大于您使用的任何其他指针(-4除外)。

总结:不要按指针排序(除非你真的知道你在做什么)。不要使用指针来表示普通整数。

答案 1 :(得分:0)

您的element变量被声明为int *类型。假设这是合适的,在您的排序中,您正在比较指针,但您似乎想要将它们指向的值与进行比较。