递归完成所有元素的快速排序,根据基准值pivot的选取方式不同,有两种实现方案:


 (1).pivot每次选取第一个元素,这样递归栈的长度是n:

  

 

 (2).pivot从中间选取,这样递归栈的长度小于n:

 

对长度为10的int切片,排序一百万次,两种快速排序进行性能比较:

  输出几组结果如下:

 

 

 

 

  经过比较,pivot从中间选取,是要比pivot每次取第一个的性能要好的,优化程度大概在8%~15%之间,

  如何理解这个原因呢?是因为pivot每次选第一个时,递归栈的高度是n,见《算法图解》中的下图:

  pivot每次选第一个的递归栈高度:

 

  pivot随机选取时的递归栈高度: