快排
引用维基百科的定义
步骤为:
- 从数列中挑出一个元素,称为”基准”(pivot),
2.重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。 - 递归地(recursively)把小于基准值元素的子数列和大于基准值元素的子数列排序。
- 递归到最底部时,数列的大小是零或一,也就是已经排序好了。这个算法一定会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。
思路
其实快排的思想很是简单;一个基准,一边大一边小;到底哪里难以理解呢?
就是他了—->原地分区 参考
简单的说,就是代码实现时比较复杂;因为递归,你总不好一直创建一个小堆,一个大堆用来储存分好区的元素吧;尤其是java,实现起来真的好烦;
所以就要使用原地分区的思路;