快速排序
一、快速排序算法思想
(1)确定分界点:一般分界点有三个点可以来取用,左边界 q [ l ] q[l] q[l],右边界 q [ r ] q[r] q[r],中间值 q [ l + r > > 1 ] q[l + r >> 1] q[l+r>>1];
(2)调整区间:通过 x x x 的值划分为左右两个区间,使得左边区间的的所有数都 ≤ \leq ≤ x x x,第二个区间的所有数都 ≥ \geq ≥ x x x;(注意:调整区间后,分界点的值不一定是 x x x , x x x 这一值可能在左区间,也可能在右区间。)
(3)递归处理左右两段:左侧区间的最大值始终 < < < 右侧区间的最小值,递归结束后使得整个区间有序。
该算法中第二步为难点
实现第二步有两种做法:一是暴力做法;二是优美做法。
一、暴力做法:最简单的思路
将 q [ l ∼ r ] q[l \sim r] q[l∼r] 中每个字符跟 x x x 比较,如果比 x x x 小则放入 a [ ] a[ ] a<