以第一个元素为支点进行快速排序

时间:2018-11-08 19:31:59

标签: algorithm sorting quicksort

我正在研究Quick-Sort,当选择第一个元素作为枢轴点时,它的工作方式使我感到困惑。

我正在尝试追踪“快速排序”算法的第一步,以将枢轴S [1](17)移动到其适当位置。

例如:[17,-10、7、19、21、23,-13、31、59]。

^# = pivot
^ pointer

我的理解:

对第一部分进行分区(此部分中的所有元素均小于枢轴)。

17, -10, 7, 19, 21, 23, -13, 31, 59
^#                               ^

比较1.没有交换。

17, -10, 7, 19, 21, 23, -13, 31, 59
^#                           ^

比较2。没有交换。

17, -10, 7, 19, 21, 23, -13, 31, 59
^#                      ^

比较3.交换。

-13, -10, 7, 19, 21, 23, 17, 31, 59
                     ^   ^#  

比较4.交换。

-13, -10, 7, 19, 21, 17, 23, 31, 59
                 ^   ^#  

比较5.交换。

-13, -10, 7, 19, 17, 21, 23, 31, 59
             ^   ^# 

比较6.交换。

-13, -10, 7, 17, 19, 21, 23, 31, 59
          ^  ^# 

比较7。没有交换。

 -13, -10, 7, 17, 19, 21, 23, 31, 59
       ^      ^# 

比较9。没有交换。

-13, -10, 7, 17, 19, 21, 23, 31, 59
  ^          ^# 

比较10。没有交换。

这是如何工作的?将枢轴S [1](17)移到正确位置需要10次比较和4次交换吗?

1 个答案:

答案 0 :(得分:0)

快速排序将具有两个移动指针和一个枢轴指针

,这些移动指针的初始位置将是0和n-1个位置(第一个和最后一个元素) 右点将向左移动,以寻找一个较短的元素,然后一旦发现该元素的左指针开始向右移动,以寻找一个大于枢轴的元素,一旦找到这些元素,它们都将互换并继续执行相同操作,直到两个指针碰头

一旦他们俩见面,就会将该元素与数据透视元素交换。

在下面查看您的示例的指针移动

17, -10, 7, 19, 21, 23, -13, 31, 59 ^# ^

17, -10, 7, 19, 21, 23, -13, 31, 59 ^# ^

17, -10, 7, 19, 21, 23, -13, 31, 59 ^# ^

右指针找到-13 <17现在开始向左移动指针

17, -10, 7, 19, 21, 23, -13, 31, 59 \# ^ ^

17, -10, 7, 19, 21, 23, -13, 31, 59 \# ^ ^

17, -10, 7, 19, 21, 23, -13, 31, 59 \# ^ ^

左点找到一个值19> 17现在交换两个指针值

17, -10, 7, -13, 21, 23, 19, 31, 59 \# ^ ^

开始向右移动点,找到比枢轴点更小的值

17, -10, 7, -13, 21, 23, 19, 31, 59 \# ^ ^

17, -10, 7, -13, 21, 23, 19, 31, 59 \# ^ ^

17, -10, 7, -13, 21, 23, 19, 31, 59 \# ^ ^

-13, -10, 7, 17, 21, 23, 19, 31, 59 ^ \#^