要点:
base数值:每次从数组left位置选择。
一次切分:小于base则 l++,大于base则 r--,l 停在左边 >base 的数值位置上,r 停在右边 <base 的数值位置上,然后交换 l 和 r 的数值,再进行上面一步的判断和移动,直到 l = r ,这个位置就是切分位置。
左右各自切分和排序:递归调用进行左右各自的切分和排序。
代码:
public class QuickSort {
public static void main(String[] args) {
int[] arr = {6, 1, 7, 3, 9, 22, 46, 0, 8};
qs(arr, 0, arr.length - 1);
for(int i:arr){
System.out.print(i + " ");
}
}
static void qs(int[] arr, int l, int r) {
if (l > r) {
return;
}
int b = arr[l];
int i = l;
int j = r;
while (i != j) {
while (arr[j] >= b && i < j) {
j--;
}
while (arr[i] <= b && i < j) {
i++;
}
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
arr[l] = arr[i];
arr[i] = b;
qs(arr, l, i - 1);
qs(arr, i + 1, r);
}
}