voidquick_sort(int q[], int l, int r) { if (l >= r) return;
int i = l - 1, j = r + 1, x = q[l + r >> 1]; while (i < j) { do i ++ ; while (q[i] < x); do j -- ; while (q[j] > x); if (i < j) swap(q[i], q[j]); } quick_sort(q, l, j), quick_sort(q, j + 1, r); }
更倾向于下面这种:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
voidquickSort(int[] q, int l, int r){ if (l >= r) { return; } int i = l, j = r; while (i < j) { // 注意,这里一定得是j在前,i在后 while (i < j && q[j] >= q[l]) j--; while (i < j && q[i] <= q[l]) i++; swap(q, i, j); } swap(q, i, l); quickSort(q, l, i - 1); quickSort(q, i + 1, r); }