Cod sursa(job #1496502)

Utilizator DanutsDanut Rusu Danuts Data 5 octombrie 2015 03:05:31
Problema Statistici de ordine Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <ctime>
using namespace std;

int partitionQuick(int v[],int left,int right)
{
    int i = left;
    int j = right;
    srand(time(0));
    int pivot = rand() % (right - left + 1 ) + left;
    cout<<pivot<<" ";

    swap(v[i],v[pivot]);
    pivot = v[i];
    i++;
    while(i<=j)
    {
        while(v[i]<pivot) i++;
        while(v[j]>pivot) j--;
        if(i<j)
            swap(v[i++],v[j--]);
    }
    swap(v[left],v[j]);
    return j;
}
int main()
{
    ifstream f("sdo.in");
    ofstream g("sdo.out");

    int n,k,*v;
    f>>n>>k;
    k--;
    v = new int[n];
    for(int i=0;i<n;++i)
        f>>v[i];
    if(n==0) return 0;
    int idx,left = 0,right = n-1;
    do
    {
        idx = partitionQuick(v,left,right);
        if(idx<k)
            left = idx+1;
        else
            right = idx - 1;

    }while(idx!=k);

    g<<v[idx];
    return 0;
}