Cod sursa(job #1011240)

Utilizator miu_mik93FMI - Paduraru Miruna miu_mik93 Data 16 octombrie 2013 16:54:35
Problema Statistici de ordine Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.01 kb
#include<iostream>
#include<stdio.h>
#define NMax 50000
using namespace std;
int partitionare (int *A, int li, int ls)
{
    int i = li-1, j = ls+1, x = A[(li+ls)/2];
    while (1)
    {
        do
        {
          ++i;
        }while(A[i] < x);

        do
        {
            --j;
        }while(A[i] > x);
         if (i < j)
            swap(A[i], A[j]);
         else
            return j;
    }
    return 0;
}
void selectie (int *A, int li, int ls, int k)
{
    int q, t;
    if (li == ls)
        return ;
    q = partitionare (A, li, ls);
    t = q-li+1;
    if (t >= k)
        selectie(A, li, q, k);
    else
        selectie(A, q+1, ls, k);
}
int main()
{
    int n, k;
    int intv[NMax];
    FILE *f = fopen("sdo.in", "r");
    FILE *g = fopen("sdo .out", "w");
    fscanf(f, "%d %d", &n, &k);
    for (int i=0; i<n; i++)
        fscanf(g, "%d", &intv[i]);
    selectie(intv, 0, n-1, k);
    fprintf(g, "%d", intv[k]);
    fclose(f); fclose(g);
    return 0;
}