Pagini recente » Cod sursa (job #67001) | Cod sursa (job #1624363) | Borderou de evaluare (job #1569059) | Cod sursa (job #2706252) | Cod sursa (job #623455)
Cod sursa(job #623455)
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int partition(int *v, int f, int n, int k)
{
int i, pivot = f + (rand()%(n - f)) ;
//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, n, k;
FILE * f = fopen("sdo.in","r");
fscanf(f, "%i%i", &n, &k);
k--;
v = (int *)malloc(n * sizeof(int));
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;
}