Cod sursa(job #3357267)

Utilizator CosminDMRCosmin Damureanu CosminDMR Data 7 iunie 2026 21:00:29
Problema Statistici de ordine Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<stdlib.h>

inline void swap(int* a, int* b) {
	int aux = *a;
	*a = *b;
	*b = aux;
}

int partition(int array[], int left, int right) {
	int Pivot = array[(left + right) / 2];
	int L = left;
	int R = right;

	while (L <= R) {
		while (array[L] < Pivot)
			L++;
		while (array[R] > Pivot)
			R--;
		if (L <= R) {
			swap(&array[L], &array[R]);
			L++;
			R--;
		}
	}

	return L;
}

int quickselect(int array[], int k, int left, int right) {
	while (left < right) {
		int p = partition(array, left, right);
		if (k < p) right = p - 1;
		else left = p;
	}

	return array[k];
}

int main(int agrc, char* argv[]) {
	FILE* input = fopen("sdo.in", "r");
	if (input == NULL) exit(1);

	int n, k;
	fscanf(input, "%d %d", &n, &k);
	int* v = (int*)malloc(n * sizeof(int));
	for (int i = 0; i < n; i++)
		fscanf(input, "%d", &v[i]);
	fclose(input);
	
	FILE* output = fopen("sdo.out", "w");
	if (output == NULL) exit(2);
	fprintf(output, "%d", quickselect(v, k - 1, 0, n - 1));
	fclose(output);

	free(v);

	return 0;
}