Cod sursa(job #1459767)

Utilizator adi_ispas95FMI - Adrian Ispas adi_ispas95 Data 10 iulie 2015 18:14:23
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <fstream>
#include <time.h>

using namespace std;

inline void Interschimba(int &a, int &b){
	int c;

	c = a;
	a = b;
	b = c;
}

int Partition(int *a, int p, int r){
	
	int i, x;
	x = a[r];
	i = p - 1;

	for (int j = p; j <= r - 1; j++)
		if (a[j] <= x){
			i++;
			Interschimba(a[i], a[j]);
		}

	Interschimba(a[i + 1], a[r]);
	return i + 1;
}

int RandomizedPartition(int *a, int p, int r){

	int i;
	srand(time(NULL));

	i = rand() % r + p;
	Interschimba(a[r], a[i]);

	return Partition(a, p, r);

}

int HorePartition(int *a, int p, int r){
	
	int x, i, j;

	x = a[p];
	i = p - 1;
	j = r + 1;

	while (1){
		
		do{
			j--
		} while (a[j] <= x);

		do{
			i++;
		} while (a[i] >= x);

		if (i < j)
			Interschimba(a[i], a[j]);
		else
			return j;
	}
}

void QuickSort(int *a, int p, int r){

	int q;

	if (p < r){
		q = HorePartition(a, p, r);
		QuickSort(a, p, q - 1);
		QuickSort(a, q + 1, r);
	}
}

int main(){

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

	const int NMAX = 500005;
	int n, *a = new int[NMAX];

	in >> n;

	for (int i = 1; i <= n; i++)
		in >> a[i];

	QuickSort(a, 1, n);

	for (int i = 1; i <= n; i++)
		out << a[i] << " ";

	return 0;
}