优化角度1:
在第 1 版快速排序的实现上,结合我们对第 1 版归并排序的讨论,我们可以知道:在待排序区间长度比较短的时候可以使用插入排序来提升排序效率,同样,我们使用 16 作为临界值。
测试用例:
近乎有序的数组,100万,归并排序,快速排序。
优化角度2:
因为快速排序的平衡度在近乎有序的时候会非常差,因此此时,递归的深度会增加。此时快速排序的算法就退化为 O(n^2)。解决办法,随机选择一个元素作为标定点。
当然优化的思路很简单,我们在每一次迭代开始之前,随机选取一个元素作为基准元素与第 1 个元素交换即可。
int randomIndex = random.nextInt(right-left+1) + left;
swap(arr,left,randomIndex);
int v = arr[left];