Cod sursa(job #1893867)

Utilizator trifangrobertRobert Trifan trifangrobert Data 26 februarie 2017 09:53:03
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstdlib>
#include <ctime>

using namespace std;
	
int n, v[500005],w[500005];

void quick_sort(int st, int dr)
{
	if (st >= dr)
		return;
	if (dr - st == 1)
	{
		if (v[st] > v[dr])
			swap(v[st], v[dr]);
		return;
	}
	int pivot=rand() % (dr - st + 1) + st;
	int median = v[pivot],l=st,r=dr;
	for (int i = st;i <= dr;i++)
	{
		if (i == pivot)
			continue;
		if (v[i] < median)
			w[l++] = v[i];
		if (v[i] >= median)
			w[r--] = v[i];
	}
	w[l] = median;
	for (int i = st;i <= dr;i++)
		v[i] = w[i];
	quick_sort(st, l - 1);
	quick_sort(l + 1, dr);
}

int main()
{
	srand(time(0));

	ifstream f("algsort.in");
	ofstream g("algsort.out");
	f >> n;
	for (int i = 1;i <= n;i++)
		f >> v[i];
	f.close();

	quick_sort(1,n);


	//for(int i=1;i<=n;i++)
	//	for(int j=i+1;j<=n;j++)
	//		if (v[i] > v[j])
	//		{
	//			swap(v[i], v[j]);
	//		}

	sort(v+1, v+n+1);

	for (int i = 1;i <= n;i++)
		g << v[i] << " ";
	g << "\n";

	g.close();

	return 0;
}