快速排序

讲解

  • 首先记住思路就行,到时候就sort就行了,这里是用到了分治的思想。
  • 注意返回条件。
  • 这里为什么定义i的时候要是l-1
    因为就是while循环里面先做的do i++;这里比如说l是0并且i取的l进入while循环的时候会从1开始,而不是0,l同理,所以这里i用l-1,然后j=r+1
  • x这里要取中值,取端点容易TLE。

源码

void quick_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);
}
THE END