Cod sursa(job #1496503)

Utilizator DanutsDanut Rusu Danuts Data 5 octombrie 2015 03:08:23
Problema Statistici de ordine Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <ctime>
#include <stdio.h>
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()
{
    FILE *f,*g;
    f = fopen("sdo.in","r");
    g = fopen("sdo.out","w");

    int n,k,*v;
    fscanf(f,"%d%d",&n,&k);
    k--;
    v = new int[n];
    for(int i=0;i<n;++i)
        fscanf(f,"%d",&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);

    fprintf(g,"%d",v[idx]);
    return 0;
}