终于到了要实现快速排序的时候了。
递归式快速排序
快速排序原理
我们先来回顾一下快速排序的原理,可分为“分”、“治”两步:
分 1.1 分区:将待排数列分成左区、轴和右区; 1.2 对分出来的左区和右区再分别进行分区,持续迭代。
治:当分出来的分区长度为 1 或 0 时,就无须再分了,至此,关于本区域的分区迭代停止。
从原理到实现
如果对应到程序中,2可以对应为一个判断条件,1.1 是分区函数,那么 1.2 呢?
关于 1.2,我们可以理解为继续进行分区。
比如,将 1.1 分出来的左区,再将左区分为左左区和左右区。如果左左区或左右区不满足长度为 1 或 0 的条件,还要继续对它(们)分区……对右区的操作亦如是。
因此 1.2 并不是简单的重复 1.1,而是援引整个算法本身——这正是递归适合处理的情况。
递归式快排的编程实现
所以