Cod sursa(job #1502713)

Utilizator TeodorCotetCotet Teodor TeodorCotet Data 14 octombrie 2015 22:40:02
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 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;

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

	pivot = dr;

	int index = st;

	int aux;

	for(int i = st ; i < dr; ++i)
		if(v[pivot] > v[i])  {
			//swap(v[index++], v[i]);
			aux = v[index];
			v[index++] = v[i];
			v[i] = aux;
		}
	aux = v[index];
	v[index] = v[dr];
	v[dr] = aux;
	//swap(v[index], v[dr]);	

	if(index - 1 > st)
		quicksort(st, index - 1);

	if(index + 1 < dr)
		quicksort(index + 1, dr);
}	


int main() {


	read();

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

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

	return 0;
}