快速排序有以下几种思路可以优化,一般来说,可以提升20%~30%的性能:
1、切换到插入排序
和大多递归排序算法类似,改进快速排序算法的一个简单办法基于以下两点:
1)对于小数组,快速排序比插入排序慢
2)因为递归,快速排序的sort()方法在小数组中也会调用自己
所以,在排序小数组时切换到插入排序对于提升算法性能是有效的。
2、三取样切分
使用子数组的一小部分元素的中位数来切分数组,这样做得到的切分效果更好,但是需要计算中位数
3、熵最优的排序
实际应用中经常会出现含有大量重复元素的数组,这样的情况下,快速排序的性能还好,但还有巨大的改进空间。因为大量重复的元素会导致快速排序的递归性使元素全部重复的子数组经常出现。
对于这种情况,一个简单的办法是将数组切为三部分,分别对应小于、大于、等于切分元素的数组元素,这样切分会比二分法更为复杂,但是性能更好。