Pagini recente » Cod sursa (job #3277872) | Cod sursa (job #2207479) | Cod sursa (job #2193538) | Cod sursa (job #1010500) | Cod sursa (job #623445)
Cod sursa(job #623445)
#include <stdlib.h>
#include <stdio.h>
int partition(int v[3000000], int f, int n, int k)
{
int i, pivot = f + (n - f)/2 ;
//v[n] = v[pivot] + v[n] - (v[pivot] = v[n]);
int aux;
aux = v[n];
v[n] = v[pivot];
v[pivot] = aux;
pivot = n;
for (i = f; i < pivot;)
{
if (v[i] > v[pivot])
{
//v[i] = v[pivot] + v[i] - (v[pivot] = v[i]);
aux = v[i];
v[i] = v[pivot];
v[pivot] = aux;
--pivot;
//v[i] = v[pivot] + v[i] - (v[pivot] = v[i]);
aux = v[i];
v[i] = v[pivot];
v[pivot] = aux;
}
else i++;
}
return pivot;
}
int main()
{
int v[3000000], n, k;
FILE * f = fopen("sdo.in","r");
fscanf(f, "%i%i", &n, &k);
k--;
int i, termen;
for ( i = 0; i < n; i++)
{
fscanf(f, "%i", v + i);
}
int flag = 1,q,left = 0, right = n-1;
fclose(f);
while (flag)
{
q = partition(v, left,right, k);
if (q == k)
{
termen = v[k];
flag = 0;
}
if (q < k)
left = q+1;
if (q > k)
right = q-1;
}
f = fopen ("sdo.out","w");
fprintf(f, "%i", termen);
fclose(f);
return 0;
}