快速排序是另一个分而治之排序算法。归并排序的重点在于合并,快速排序的重点在于分。(红色为每一次选取的候选轴点)
对于一个数组,起始为lo,结束为hi,轴点为pivot。通过每次选取不同的轴点,将轴点移动至某一位置,使得满足下述条件。
那么如何分呢?重点在于寻找轴点轴点需要满足的条件:其左侧元素都比其小,右侧元素都要比其大。如下图:
那么,快速排序就是使得所有元素逐个转换为轴点pivot,那么如何找到/构造这个轴点呢?
构造轴点
- 任取一个数组元素设置为候选轴点pivot,那就随意点---选择a[0]
- 中段U初始化为全集;比轴点小者归为前缀L,U左边界收缩;比轴点大者归为后缀G,U右边界收缩。