快速排序优化
快排是效率很高的排序方法,但仍有一些问题,如稳定性不高,处理小数组效率不算很高,处理重复数字效率低,难以选取最优中轴
主要有三种优化方式
-
使用插入排序处理小数组
-
三值交换选取中轴
-
聚集重复元素
中轴处理
/**
* 前 中 后三者排序 并把中轴放在high - 1的位置 如{3,4,2,6,1} 会处理为 {1,4,6,2,3}
*/
public static void dealPivot(int[] arr, int left, int right) {
int mid = (left + right) / 2;
if (arr[left] > arr[mid]) {
swap(arr, left, mid);
}
if (arr[left] > arr[right]) {
swap(arr, left, right);
}
if (arr[right] < arr[mid]) {
swap(arr, right, mid);
}
swap(arr, right -