Cod sursa(job #1851169)

Utilizator mdiannnaMarusic Diana mdiannna Data 19 ianuarie 2017 14:19:19
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
 
using namespace std;
 
int N, k;
int A[3000001];
 
void citire(){
    scanf("%d %d", &N, &k);
    for(int i=1; i<=N; i++)
        scanf("%d", &(A[i]));
}
 
void afisare(){
    for(int i=1; i<=N; i++)
        printf("%d ", A[i]);
    printf("\n");
}
 
 
int random(int left, int right){
    return rand() % (right-left+1) + left;
}
 
int Partition(int left, int right){
    //int p = (left+right)/2;
 
    int p = random(left, right);
    int x = A[p];
    int iLeft = left;
    int iRight = right;
    do{
        while(A[iLeft]<x)
            iLeft++;
        while(A[iRight]>x)
            iRight--;
        if(iLeft<=iRight){
            swap(A[iLeft], A[iRight]);
            iLeft++;
            iRight--;
        }
 
    }while (iLeft<=iRight);
 
    return iLeft-1;
}
 
void QuickSort(int left, int right){
    if(right<=left)
        return;
    int q = Partition(left, right);
    //afisare();
 
 
        if(k<=q)
            QuickSort(left, q);
        else
            QuickSort(q+1, right);
}
 
int main(){
     freopen("sdo.in", "r", stdin);
    freopen("sdo.out", "w", stdout);
 
    srand(time(NULL));
    citire();
    if(N == 1)
        cout << A[1];
     else
        QuickSort(1, N);
   // afisare();
    cout << A[k];
    return 0;
}