Cod sursa(job #1502611)

Utilizator TeodorCotetCotet Teodor TeodorCotet Data 14 octombrie 2015 20:46:10
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
#include <queue>
#include <cstring>
#include <ctime>
#include <stdlib.h>

using namespace std;

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

const int NMAX = 500001;

int N;

int v[NMAX]; 

void read() {

	fin >> N;
	
	for(int i = 1 ; i <= N; ++i)
		fin >> v[i];
}

void quicksort(int st, int dr) {

	if(dr <= st) return;

	int pivot = rand() % (dr - st) + st; 

	int left = st; int right = dr; 

	pivot = dr;
	swap(v[pivot], v[dr]);

	dr--;

	while(st < dr) {

		while(st < dr && v[st] <= v[pivot]) ++st;

		while(st < dr && v[dr] >= v[pivot]) --dr;

		swap(v[st], v[dr]);
		
	} 
	//st este separatorul

	if(v[st] > v[pivot] )
		swap(v[pivot], v[st]);

	if(left < st)
		quicksort(left, dr);
	
	if(st + 1 < right)
		quicksort(st + 1, right);
}	


int main() {


	read();

	srand(time(NULL));
	quicksort(1, N);

	for(int i = 1; i <= N; i++)
		fout << v[i] << " ";

	return 0;
}