Cod sursa(job #1534596)

Utilizator TeodorCotetCotet Teodor TeodorCotet Data 23 noiembrie 2015 20:21:54
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <bits/stdc++.h>


using namespace std;


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

const int NMAX = 3000002;

int k; int n;

int v[NMAX];

void quick(int st, int dr) {

	if(st >= dr)
		return ;

	int p = st + rand() % (dr - st + 1);

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

	int index = st - 1;

	//intre st si index elemente mai mici decat pivotul v[dr] inclusiv
	//intre index + 1 si dr elemente mai mare sau egale ca pivotul

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



	swap(v[dr], v[index + 1]);



	 quick(st, index);

	 quick(index + 2, dr);

}


int main() {

	srand(time(NULL));

	ios_base::sync_with_stdio(false);

	fin >> n;
	for(int i = 1 ; i <= n ; ++i)
		fin >> v[i];
	
	quick(1, n);


	for(int i = 1 ; i <= n ; ++i)
		fout << v[i] << " ";
	return 0;
}