使用随机化,第四、五个点依然TLE,开O2后第四个点过了,第五个TLE
查看原帖
使用随机化,第四、五个点依然TLE,开O2后第四个点过了,第五个TLE
450878
TianShui楼主2021/8/28 10:23
#include <cstdio>
#include <cstring>
#include <ctime>
#include <iostream>
#include <string>
using namespace std;
#define N 1000005

int n;
int a[N];

void swap(int& a, int& b) {
    int p = a;
    a = b;
    b = p;
}
int cnt = 0;

int partition(int left, int right) {
    int t;
    t = rand() % (right - left + 1) + left;
    swap(a[t], a[right]);
    int pos = left;
    for (int i = left; i <= right; i++) {
        cnt++;
        if (a[i] <= a[right]) {
            swap(a[i], a[pos]);
            pos++;
        }
    }
    return pos - 1;
}

void quick_sort(int left, int right) {
    if (left <= right) {
        int mid = partition(left, right);
        quick_sort(left, mid - 1);
        quick_sort(mid + 1, right);
    }
}

int main() {
    srand(clock());
    scanf("%d",&n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
    quick_sort(0, n - 1);
    for (int i = 0; i < n; i++) {
        printf("%d ", a[i]);
    }
    printf("\n");
}
2021/8/28 10:23
加载中...