部分快排TLE,求助!
查看原帖
部分快排TLE,求助!
216553
Lhw_666楼主2020/12/20 09:51
#include <bits/stdc++.h>
using namespace std;

int swap(int arr[], int i, int j){
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

int *partition(int arr[], int L, int R){
    int less = L-1;
    int more = R;
    for(int i = L; i < more;){
        if(arr[i] < arr[R]){
            swap(arr, i++, ++less);
        }else if(arr[i] > arr[R]){
            swap(arr, i, --more);
        }else{
            i++;
        }
    }
    swap(arr, more, R);
    return new int [2] {less+1, more};
}

void quickSort(int arr[], int L, int R, int K){
    if(L < R){
        int *p = partition(arr, L, R);
        if(K < p[0]){
            quickSort(arr, L, p[0]-1, K);
        }else if(K > p[1]){
            quickSort(arr, p[1]+1, R, K);
        }
        else if (K >= p[0] && K <= p[1]){
            cout << arr[p[0]];
            return;
        }
    }else if(L==R){
        cout << arr[K];
    }
}

int *arr = new int [1000000000];
int main(){
    int n, K;
    cin >> n >> K;
    for(int i = 0; i < n; i++)
        cin >> arr[i];
    quickSort(arr, 0, n-1, K);
}

2020/12/20 09:51
加载中...