P1177 【模板】快速排序

#include<iostream>
using namespace std;

int n, a[1000001];
void qsort(int l, int r)//采用二分思想
{
    int  mid = a[(l + r) / 2];
    int i = l, j = r;
    do
    {
        while (a[i] < mid)//寻找左侧大于mid的数
            i++;
        while (a[j] > mid)//寻找右侧小于mid的数
            j--;
        if (i <= j)//一旦找到符合条件(左大右小)的两个数,将它们进行交换。
        {
            swap(a[i], a[j]);
            i++;
            j--;
        }
    } while (i <= j);
    if (l < j)
        qsort(l, j);//继续对左侧区间调用qsort
    if (i < r)
        qsort(i, r);//继续对右侧区间调用qsort
}
int main()
{
    cin >> n;
    for (int i = 1; i <= n; ++i)
        cin >> a[i];
    qsort(1, n);
    for (int i = 1; i <= n; ++i)
        cout << a[i] << " ";
    return 0;
}
Last modification:March 1, 2021
兴趣使然