Cod sursa(job #2897693)

Utilizator alex2209alexPavel Alexandru alex2209alex Data 4 mai 2022 15:40:47
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>

using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int v[500001], n;
void qsort(int st,int dr)
{
	if(st >= dr)
	{
		return;
	}
	int pivot = v[(st + dr) / 2];
	int mic = 0;
	int mare = 0;
	for(int i = st; i <= dr; ++i)
		if(v[i] < pivot)
			mic++;
		else if(v[i] > pivot)
			mare++;
	int ma = dr;
	for(int i = st; i <= st + mic - 1; ++i)
		while(v[i] >= pivot)
		{
			swap(v[i], v[ma]);
			ma--;
		}
	ma = dr;
	for(int i = st + mic; i <= dr - mare; ++i)
        while(v[i] != pivot)
		{
			swap(v[i], v[ma]);
			ma--;
		}
    qsort(st, st + mic - 1);
    qsort(dr - mare + 1,dr);
}

int main()
{
	f >> n;
	for(int i = 1; i <= n; ++i)
		f >> v[i];
    qsort(1, n);
    for(int i = 1; i <= n; ++i)
		g << v[i] << " ";
	return 0;
}