Cod sursa(job #801644)

Utilizator c_sebiSebastian Crisan c_sebi Data 24 octombrie 2012 19:07:32
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#include <cstdlib>
#include <ctime>

using namespace std;


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

pair<int, int> partition2(int a[], int p, int r){
	srand ( time(NULL) );
	int x = p + rand() % (r - p + 1);
	swap(a, x, r);
	x = a[r];
	int i = p-1, j = p, k = r;
	while(j < k){
		if(a[j] < x){
			i++;
			swap(a, i, j);
			j++;
		}
		else if(a[j] == x){
			j++; 
		}
		else{
			k--;
			swap(a, k, j);
		}
	}
	swap(a, r, k);
	return make_pair(i, k+1);
}




void QS(int a[], int p, int r){
	if(p < r){
		pair<int, int> q = partition2(a, p, r);
		QS(a, p, q.first);
		QS(a, q.second, r);
	}
}

int main(){
	int N, *a;
	ifstream f("algsort.in");
	ofstream g("algsort.out");
	f >> N;
	a = new int[N];
	for(int i = 0; i < N; ++i)
		f >> a[i];
	QS(a, 0, N-1);
	for(int i = 0; i < N; ++i)
		g << a[i] << " ";
	f.close();
	g.close();
	return 0;
}