快排

#include <bits/stdc++.h>
using namespace std;
int n,a[100000];
void quick_sort(int a[], int l, int r) {
    if (l < r) {
        int i = l, j = r, x = a[l];
        while (i < j) {
            while (i < j && a[j] >= x) // 从右向左找第一个小于x的数
                j--;
            if (i < j)
                a[i++] = a[j];
            while (i < j && a[i] < x) // 从左向右找第一个大于等于x的数
                i++;
            if (i < j)
                a[j--] = a[i];
        }
        a[i] = x;
        quick_sort(a, l, i - 1);
        quick_sort(a, i + 1, r);
    }
}
int main() {
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        scanf("%d", &a[i]);
    }
    quick_sort(a, 1, n);
    for (int i = 1; i <= n; i++) {
        printf("%d\n", a[i]);
    }
}
上一篇:【堆】B000_LC_前 K 个高频元素(快速选择)


下一篇:并查集01--[Quick Find&&Quick Union]