快速排序基于分治的思想
- 确定分界点 q[l],q[(l+r)/2],q[r]
- 调整范围,使得左边的都小于等于分界点,右边的都大于分界点
- 递归处理左右两段
void quick_sort(int q[], int l, int r) {
// 当l >= r的时候结束递归
if(l >= r) {
return;
}
// 确定分界点
int x = q[l];
while(i < j) {
while(q[++l] < x);
while(q[--j] > x);
// 注意在i < j的前提下交换两个元素
if(i < j) {
swap(q[i], q[j]);
}
}
// 递归处理左右两个子段
quick_sort(q, l, j);
quick_sort(q, j + 1, r);
}