递归完成所有元素的快速排序,根据基准值pivot的选取方式不同,有两种实现方案:
(1).pivot每次选取第一个元素,这样递归栈的长度是n:
(2).pivot从中间选取,这样递归栈的长度小于n:
对长度为10的int切片,排序一百万次,两种快速排序进行性能比较:
输出几组结果如下:
经过比较,pivot从中间选取,是要比pivot每次取第一个的性能要好的,优化程度大概在8%~15%之间,
如何理解这个原因呢?是因为pivot每次选第一个时,递归栈的高度是n,见《算法图解》中的下图:
pivot每次选第一个的递归栈高度:
pivot随机选取时的递归栈高度: