简单模板
void quick_sort(int a[], int l, int r)
{
if (l >= r) return;
int i = l - 1, j = r + 1;
int x = a[l + r >> 1];
while (i < j)
{
do i++;
while (a[i] < x);
do j--;
while (a[j] > x);
if (i < j) swap(a[i], a[j]);
}
quick_sort(a, l, j);
quick_sort(a, j + 1, r);
}
注意:
- 要先
i++
j--
是因为有可能a[i] = a[j] = x
- 若用
quick_sort(a, l, i - 1)
quick_sort(a, i, r)
则x = a[l + r + 1 >> 1]
用i
时x
不能取左边界,用j
时 不能取右边界
例如:序列3 4
,若用i
且x = a[l + r >> 1]
,会陷入死循环