如何选择枢纽?
如何找到比枢纽大的数和比枢纽小的数,并把比枢纽大的数放在枢纽后面,把比枢纽小的数放枢纽前面?
class Solution {
public static void quickSort(int[] arr, int left, int right) {
if (arr.length<=1 || left>right) {
return;
}
int mid = partition(arr, left, right);
quickSort(arr, left, mid-1);
quickSort(arr, mid+1, right);
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
private int partition(int[] arr, int left, int right) {
//枢纽数选择三数的中值
int mid = left + (right - left)/2;
if (arr[left] > arr[right]) {
swap(arr, left, right);
}
if (arr[mid] > arr[right]) {
swap(arr, mid, right);
}
if (arr[mid] > arr[left]) {
swap(arr, mid, left);
}
int pivot = arr[left];
while (right > left) {
while (left < right && arr[right] >= pivot) {
right --;
}
if (left < right && arr[right] < pivot) {
arr[left] = arr[right];
left ++;
}
while (left < right && arr[left] <= pivot) {
left ++;
}
if (left < right && arr[left] > pivot) {
arr[right] = arr[left];
right --;
}
}
arr[left] = pivot;
return left;
}
}