Pagini recente » Cod sursa (job #2636540) | Cod sursa (job #1578935) | Cod sursa (job #1121293) | Cod sursa (job #894168) | Cod sursa (job #1011240)
#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;
}