分而治之
分而治之(D&C)是一种解决问题的思路,是一种运用递归来解决问题的方法。
使用D&C解决问题的过程包括两个步骤。
-
找出基线条件,这种条件必须尽可能简单。
-
不断将问题分解(或者说缩小规模),直到符合基线条件。
快速排序
快速排序是一种运用了D&C思路的排序算法。按照D&C的思路,需要先找到基线条件,再不断分解问题,通过递归解决问题。
基线条件
对一个数组进行排序时,当数组为空或只包含一个元素,就只需返回原数组,不再需要排序。这也是快速排序的基线条件。
工作原理
进行快速排序时,需要先选择一个元素作为基准值,然后将其他元素和基准值进行比较,分出比基准值小的一个数组,和比基准值大的一个数组。然后把问题分解,缩小规模,对分出的两个子数组,再重复做同样的操作,选择基准值,分解为一个比基准值小的数组,和一个比基准值大的数组。直到符合基线条件 —— 数组为空或只包含一个元素。
这样每个子数组都被处理为 [比基准值小的元素] [基准值] [比基准值大的元素]的形式,通过递归处理,最终完成对整个数组的排序。
快速排序可以总结为3个步骤。
-
选择基准值。
-
将数组分成两个子数组:小于基准值的元素和大于基准值的元素。
-
对这两个子数组进行快速排序,重复这样的操作,通过递归完成排序。
来源:移动云官网开发者社区