快排之双向扫描分区
public class 快排之双向扫描分区 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = { 9, 8, 7, 6, 5, 0, 4, 8, 3, 2, 8, 7, 10 };
quickSort(arr, 0, arr.length - 1);
for (int num : arr) {
System.out.print(num + " ");
}
}
private static void quickSort(int[] arr, int begin, int end) {
if (begin >= end) {
return;
}
int indexOfMid = partition(arr, begin, end);
quickSort(arr, begin, indexOfMid - 1);
quickSort(arr, indexOfMid + 1, end);
}
private static int partition(int[] arr, int begin, int end) {
int pivot = arr[begin];
int sp = begin + 1;
int bigger = end;
while (sp <= bigger) {
while (sp <= bigger && arr[sp] <= pivot) {// 遇大停,不能越界
sp++;
}
while (sp <= bigger && arr[bigger] > pivot) {// 遇小停,不能越界
bigger--;
}
if (sp < bigger) {// = 不用加,没有意义,不能越界
swap(arr, sp, bigger);
}
}
swap(arr, begin, bigger);
return bigger;
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}