快排,最后一个点TLE,求助
查看原帖
快排,最后一个点TLE,求助
1094817
molsonsama楼主2024/2/27 19:04

前四个点AC,基准数是随机选的,但是第五个点TLE,我看了其他人快排AC的代码,感觉没有什么不同的地方,但是请问为什么不过呢? 代码如下:

#include <iostream>
#include <vector>
#include <ctime>
using namespace std;
int partition(vector<int> &vec, int left, int right) {
    int num = rand() % (right - left + 1) + left;
    swap(vec[num], vec[left]);
    int part = vec[left];
    int i = left, j = right;
    while(i < j) {
        while(vec[j] >= part && i < j) 
            j--;
        while(vec[i] <= part && i < j) 
            i++;
        if(i < j) swap(vec[i], vec[j]);
    }
    swap(vec[left], vec[i]);
    return i;
}
void QuickSort(vector<int> &vec, int left, int right) {
    if(left >= right) return;
    int mid = partition(vec, left, right);
    QuickSort(vec, left, mid - 1);
    QuickSort(vec, mid + 1, right);
}
int main() {
    srand(time(nullptr));
    long long n;
    cin >> n;
    vector<int> vec(n);
    for(int i = 0; i < n; i++) {
        cin >> vec[i];
    }
    QuickSort(vec, 0, n - 1);
    for(auto &it : vec) {
        cout << it << " ";
    }
    return 0;
}

求助,谢谢大佬了。

2024/2/27 19:04
加载中...