Cod sursa(job #472407)

Utilizator whoasdas dasdas who Data 24 iulie 2010 17:22:04
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <stdio.h>
#include<iostream>
#include <fstream>
unsigned int a[500005], n;
using namespace std;

inline void swap(int i, int j)
{
	int aux = a[i];
	a[i] = a[j];
	a[j] = aux;
}

inline int partition(int l, int r)
{
	int p = l-1, i;

	i = rand()%(r-l+1)+l;
	swap(i,r);


	// a[l...p]   <= a[r]
	// a[p+1...i] >= a[r]
	// deci p indica ultimul element < pivotul

	for (i=l;i<r;i++)
		if(a[i]<a[r])
			swap(++p,i);

	swap(++p,r);
	return p;

}

void quicksort(int l, int r)
{
	if(l>=r) return;
	int p = partition(l,r);	// p -> pozitia pivotului

	quicksort(l,p-1);		
	quicksort(p+1,r);
}

int main()
{
	int i;

	ifstream in("algsort.in");
	ofstream out("algsort.out");

	in>>n;
	for(i=1;i<=n;i++) in>>a[i];
	quicksort(1,n);
	for(i=1;i<=n;i++) out<<a[i]<<" ";

	out.close();
	return 0;
}