Cod sursa(job #1103762)

Utilizator balakraz94abcd efgh balakraz94 Data 9 februarie 2014 22:14:02
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<fstream>
#include<cstdlib>
#include<time.h>
#include<algorithm>
#define nMax 500005
using namespace std;

int N, V[nMax];

void Quick3Way(int lo, int hi){
    if (hi <= lo) 
        return;
 
    int lt = lo, gt = hi;
    int idx = lo;
    int v = V[lo];
     
    while(idx <= gt){
        if(V[idx] < v)
            swap(V[lt ++], V[idx ++]);
        else if(V[idx] > v)
            swap(V[idx], V[gt --]);
        else
            idx ++;  
    }
     
    Quick3Way(lo, lt - 1);
    Quick3Way(gt + 1, hi);
}

void RandomShuffle(){
    srand ( time(NULL) );
     
    for(int i = 0; i < N; ++ i)
        swap(V[i], V[rand() % N]);
}

int main(){
	ifstream f("algsort.in");
	ofstream g("algsort.out");

	f >> N;
	for(int i = 0; i < N; ++ i)
		f >> V[i];

	RandomShuffle();
	Quick3Way(0, N - 1);

	for(int i = 0; i < N; ++ i)
		g << V[i] << " ";


	f.close();
	g.close();

	return 0;
}