Cod sursa(job #1868322)

Utilizator M.AnaAna Marginean M.Ana Data 4 februarie 2017 20:30:23
Problema Statistici de ordine Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in ("sdo.in");
ofstream out("sdo.out");
int n, k;
int v[3000001];

int partition(int v[], int left, int right) {
	int i = left, j = right;

	int random = rand() % right + left;

	int pivot = v[random];

	while (i <= j) {
		while (v[i] < pivot) i++;
		while (v[j] > pivot) j--;

		if (i <= j) {
			int aux = v[i];
			v[i] = v[j];
			v[j] = aux;
			i++; j--;
		}
	}

	return i;
}

void quicksort(int v[], int left, int right, int k) {
	if (left == right) return;

	int index = partition(v, left, right);
	int t = index - left + 1;

	if (t >= k)
		quicksort(v, left, index, k);
	else
		quicksort(v, index + 1, right, k - t);

}
int main()
{
	in >> n >> k;

	for (int i = 0; i < n; i++) {
		in >> v[i];
	}

	quicksort(v, 0, n - 1, k);

	out << v[k - 1];
}