如果piot是第一个或最后一个,则quck排序指针的位置应该是什么?

时间:2019-03-13 17:55:13

标签: sorting quicksort

我相信它已经在很多地方进行过很多次讨论,但是我已经搜索了3天,却没有意识到这是怎么回事。我的问题是:

如果我们将第一个或最后一个元素作为枢轴,那么第二个指针在哪里?

我的字面意思是:

案例1

Central array element as a pivot

这一切清楚,因为5位于中间,我们继续查找符合条件的元素:

1。)元素<如果发现左侧枢轴,我们将停止指针

2。)元素>如果找到,则向右旋转

3。)交换我们在步骤1和2中停止指针的位置的元素

情况2:(一个不清楚的

first or last element as a pivot

目前尚不清楚我应该将两个指针放在哪里开始寻找一个元素,并且应该向枢轴移动哪个方向?这也应该是两个指针,如何移动它们? 还应该是两个指针吗?

1 个答案:

答案 0 :(得分:0)

如果使用两个指针,则是Hoare分区方案的一种变体,其中指针从数组的第一个元素和最后一个元素开始,并在扫描“不适当的”元素时彼此靠近。如果选择第一个或最后一个元素作为枢轴,则第一次交换将涉及枢轴。

请注意,Hoare算法通常将枢轴包括在分区之一中。如果将第一个或最后一个元素用作枢轴,则会产生问题,因为像已排序数据这样的数据模式将导致堆栈溢出,因为拆分将始终为0个元素和n个元素。要解决此问题,该算法需要在递归调用中排除数据透视。