排序算法 五快速排序
Posted 派先生的算法小屋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法 五快速排序相关的知识,希望对你有一定的参考价值。
快速排序是效率最高的排序算法之一,与归并排序一样有着广泛的应用。
【算法介绍】
核心思想:分而治之
①将数列根据第一个数字分为两段,其左端是小于该数字的,右端是大于该数字的
②再次对分割出的左右两段进行操作
不难看出,对于①步骤结束后,是左右两段排序的子问题,所以一般情况下快速排序利用递归实现。
还是上实例吧:
例如数列:
6 |
3 | 7 | 13 | 5 | 4 | 8 | 6 |
(1)默认选中操作区间的第一个数字为关键字:
6 |
3 |
7 | 13 |
5 | 4 |
8 | 6 |
(2)①设置右端点j,从右向左找到"小于等于"关键字的数:
j |
|||||||
6 |
3 |
7 | 13 |
5 | 4 |
8 | 6 |
②设置左端点i,从左向右寻找"大于"关键字的数:
i |
j |
||||||
6 |
3 |
7 | 13 |
5 | 4 |
8 | 6 |
③交换i和j:
i |
j |
||||||
6 |
3 |
6 | 13 |
5 | 4 |
8 | 7 |
④j继续寻找"小于等于"关键字的数:
i |
j | ||||||
6 |
3 |
6 | 13 |
5 | 4 |
8 | 7 |
⑤i继续寻找"大于"关键字的数:
i | j | ||||||
6 |
3 |
6 | 13 |
5 | 4 |
8 | 7 |
⑥交换i和j:
i | j | ||||||
6 |
3 |
6 | 4 | 5 | 13 |
8 | 7 |
⑦j继续寻找"小于等于"关键字的数:
i | j | ||||||
6 |
3 |
6 | 4 | 5 | 13 |
8 | 7 |
⑧i继续寻找"大于"关键字的数,过程中与i和j重叠,循环结束:
ij | |||||||
6 |
3 |
6 | 4 | 5 | 13 |
8 | 7 |
⑧交换关键字与i,一趟结束:
i、j | |||||||
5 |
3 |
6 | 4 | 6 | 13 |
8 | 7 |
⑨至此,区间被分为"小于等于6"与"大于6"两部分,继续递归操作[1,4]区间与[6,8]区间……(中间的i(j)位置的数字已经在正确的位置上了,无需再排序):
ij | |||||||
5 |
3 |
6 | 4 | 6 | 13 |
8 | 7 |
【代码实现】
一趟操作:
i
=
L
#左端点
以上是关于排序算法 五快速排序的主要内容,如果未能解决你的问题,请参考以下文章