这个逻辑被称为Partition
用指针 l表示第一个元素 v 的位置
用指针j表示小于v区间的最后一个元素的位置
用指针i表示遍历这个序列的光标位置
那么arr[l+1..j] < v; arr[j+1..i-1] > v
当i指向的元素 arr[i] >= v ,光标后移(i++)即可
而当 arr[i] < v,则 j+1与i位置做交换,j的位置和光标都后移
当这个过程走完,将v与j交换位置即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
publicstaticvoidquickSort(int[] arr, int l, int r){ if (l >= r) return; __partition(arr, l, r); }
privatestaticvoid__partition(int[] arr, int l, int r){ int j = l; int v = arr[l]; for (int i = l + 1; i <= r; i++) { if (arr[i] < v) BaseArrayUtil.swap(++j, i, arr); } arr[l] = arr[j]; arr[j] = v; quickSort(arr, l, j - 1); quickSort(arr, j + 1, r); }