队列快速排序工具?

时间:2016-09-23 17:47:42

标签: c sorting stack queue quicksort

我可以使用队列实现快速排序吗?
我发现这篇文章只有https://www.quora.com/Can-we-use-a-queue-in-quicksort-in-C
这篇文章是否正确?
如果是,为什么教科书总是只通过堆栈或递归方法实现快速排序?
因为关于这个问题的信息很少,所以我在这里问。

2 个答案:

答案 0 :(得分:2)

bad cache performance

使用堆栈,我们有足够的时间局部性,而队列则完全丢失。我们基本上是尝试在队列方法中以广度优先搜索方式对数组进行排序。

编辑(来自Will Ness的回答):更大的数组(> RAM),队列方法甚至不起作用,因为它需要O(n)空间来排序大小的数组ñ。而基于堆栈的方法仅需要log n空间。两者的所有理论时间复杂度都是相同的。

答案 1 :(得分:0)

  

为什么教科书总是通过堆栈或递归方法实现快速排序

因为quicksort的本质在于它是就地的,并且排序是通过对正在排序的相同数组的重复分区来实现的。

分区从上到下完成,从阵列的较大尺寸部分到较小和较小部分。

如果我们使用堆栈来管理尚未完成的工作,那么该堆栈的大小对数在数组的大小(如果放在堆栈上的分区是更大的,总是)。这相当于深度优先遍历。

但是如果我们使用队列,那么它将等同于广度优先遍历,队列的大小将是线性(其中指数比对数更糟糕。)