Cod sursa(job #2278418)

Utilizator richard26Francu Richard richard26 Data 7 noiembrie 2018 23:52:08
Problema Statistici de ordine Scor 70
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int arr[3000001];
void swp(int * a, int * b)
{
	int aux = *a;
	*a = *b;
	*b = aux;

}

int partition(int left, int right)
{
	int s = rand () % (right - left + 1) + left;
    swp(&arr[s], &arr[right]);
    int pivot = arr[right];
    int i = left;
    for (int j = left; j < right; j++){
    	if(arr[j] < pivot){
    		if (i != j){
    			swp(&arr[i], &arr[j]);
    		}
    		i++;
    	}
    }
    swp(&arr[right], &arr[i]);
    return i;

}
int kel(int left, int right, int k)
{
	
    int p = partition(left, right);
    if (p == k) return arr[k];
    if (p < k) kel(p + 1, right, k);
     else kel(left, p - 1, k);

   
}
int main()
{
	FILE *f, *g;
	f = fopen("sdo.in", "r");
	g = fopen("sdo.out", "w");
	srand( time(NULL));
	
	int n, k;

	fscanf(f,"%d%d", &n, &k);
	for (int i = 1; i <= n; i++) fscanf(f, "%d", &arr[i]);
	int x = kel(1, n, k);
	fprintf(g,"%d",x);
	return 0;
	
}