快速排序法之双路快排,男人不可以说自己快!

280 阅读2分钟

目录:

  • 一、快排方法

  • 二、代码美图

一、快排方法

45210639817

首先对上面的数字进行快速排序。暂时定为数组a[10]。

一、

先在这个序列中随便找一个数作为基准数,通常选第一个数作为基准数叫他为Key吧,上面的4就是Key。(基准数的目的就是把比Key小的数放到Key的左边,把比Key大的数放到Key的右边。)

<4         4        >4

二、

| 4 | 5 | 2 | 10 | 6 | 3 | 9 | 8 | 1 | 7 |

i 作为基准数的下标,j 作为最右边数字的下标(看成一个数组)。j 向左边移动直到找到比Key(基准数)小的数(好交换到前面去)。然后i 就向右边移动直到找到比Key(基准数)大的数。(好交换到后面去)。

移动期间,j 要一直在i 的右边。i 要一直在j 的左边。(j>i),i和j遇到时就停下来。

4 | 5 | 2 | 10 | 6 | 3 | 9 | 8 | 1 | 7 |

这个时候5和1就交换。

然后继续循环①的操作

41210639857
ij
41236109857
ij

这个时候10和3就交换。

这个时候j继续向左边移动,到6时,6比4大要不得,还要望左边冲冲冲。到3下面时,j和i就碰到了。j就不可以移动了。然后i和j碰到对应的数字3就要和Key(基准数) 4 交换。

41236109857
i,j

最后就成这样了

31246109857

三,进行递归。(Key(4)就把一个数组分成了2个数组了)。

就是把3,1,2看成一个数组重复上面的操作。

把6,10,9,8,5,7看成一个数组重复上面的操作。

最后就会变成

12345678910

二、代码美图 (是c语言实现的,JavaScript后续会补上)