快速排序交换指针方式相对于填坑法比较好理解一点
直接上代码
public static void quickSort(int[] arr,int begin, int end){
if (begin>=end) return;// 只有一个元素 或者没有元素
int pivotIndex = partition(arr, begin, end);
quickSort(arr, begin, pivotIndex - 1);
quickSort(arr, pivotIndex + 1, end);
}
private static int partition(int[] arr, int start, int end) {
// 随机选择一个元素跟begin位置进行交换 增加随机性 防止选择的pivot值为最大值或最小值
// swap(left,right + (int)Math.random() * (left - right));
// 取第一个位置的元素作为基准元素
int pivot = arr[start], left = start, right =end;// 需要保留起始索引,最后交换时用
while (left < right) {
// 必须先从右边开始比较
// 控制right指针比较并左移
while (left < right && arr[right] >= pivot) right--;
// 控制right指针比较并右移
while (left < right && arr[left] <= pivot) left++;
// 交换left和right指向的元素
if (left < right) {//
int t = arr[left];
arr[left] = arr[right];
arr[right] = t;
}
}
// pivot和指针重合点交换
arr[start] = arr[left];
arr[left] = pivot;
return left;
}