Cod sursa(job #1702126)

Utilizator bent_larsenSturzu Antonio-Gabriel bent_larsen Data 14 mai 2016 16:09:38
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <vector>
#include <cstdlib>
using namespace std;

int partition(vector<int>& v, int left, int right)
{
	int r = rand() % (right - left + 1);
	int piv = left + r;	
	int x = v[piv];
	
	swap(v[piv], v[right]);
	int l = left - 1;
	for(int i = left;i < right;++i)
	{
		if(v[i] <= x)
		{
			swap(v[i], v[++l]);
		}
	}
	swap(v[right], v[l + 1]);
	return l + 1;
}

void q_sort(vector<int>& v, int left, int right)
{
	if(left >= right)
	{
		return;
	}
	
	int pivot = partition(v, left, right);
	q_sort(v, left, pivot - 1);
	q_sort(v, pivot + 1, right);
}

void quick_sort(vector<int>& v)
{
	int l = 0;
	int r = v.size() - 1;
	
	q_sort(v, l, r);
}

int main()
{
	ifstream in("algsort.in");
	ofstream out("algsort.out");
	
	int N;
	in >> N;
	
	vector<int> v;
	for(int i = 0;i < N;++i)
	{
		int nr;
		in >> nr;
		v.push_back(nr);
	}
	
	quick_sort(v);
	for(int i = 0;i < N - 1;++i)
	{
		out<<v[i]<<" ";
	}
	out<<v[N - 1];
	out<<"\n";
	
	in.close();
	out.close();
}