请问为什么快排优化了还是TLE
查看原帖
请问为什么快排优化了还是TLE
1446336
zhagnhuayi233楼主2025/1/22 18:07
#include <iostream>
#include <vector>
using namespace std;

void quickSelect(vector<int>& a, int left, int right, int k) {
    if (left >= right) {
        cout << a[k] << endl;
        return;
    }

    int mid = (left + right) / 2;
    int pivot = a[mid];
    int l = left, r = right;

    while (l <= r) {
        while (a[l] < pivot) l++;
        while (a[r] > pivot) r--;
        if (l <= r) {
            swap(a[l], a[r]);
            l++;
            r--;
        }
    }
    if (k <= r) {
        quickSelect(a, left, r, k);
    }
    else if (k >= l) {
        quickSelect(a, l, right, k);
    }
    else {
        cout << a[k] << endl;
    }
}

int main() {
    int n, k;
    cin >> n >> k;
    vector<int> b(n);
    for (int i = 0; i < n; i++) {
        cin >> b[i];
    }
    quickSelect(b, 0, n - 1, k);
    return 0;
}
2025/1/22 18:07
加载中...