Cod sursa(job #2126066)

Utilizator tudor199G Tudor tudor199 Data 9 februarie 2018 00:21:30
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <cstdlib>
#include <fstream>

#define nMax 500003

#define SWAP(a, b) (v[0] = v[a], v[a] = v[b], v[b] = v[0])

using namespace std;

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

int n;
int v[nMax];

int partition(int lo, int hi){
    int pivot = lo + (rand() % (hi - lo + 1));
    SWAP(pivot, hi);
    pivot = hi --;
    while(lo < hi){
        if(v[lo] >= v[pivot]){
            SWAP(lo, hi);
            -- hi;
        }
        else{
            ++ lo;
        }
    }
    if(v[lo] >= v[pivot]){
        SWAP(lo, pivot);
    }
    else{
        SWAP(lo + 1, pivot);
    }
    return pivot;
}

void quick(int lo, int hi){
    if(lo >= hi){
        return;
    }
    int pivot = partition(lo, hi);
    quick(lo, pivot - 1);
    quick(pivot + 1, hi);
    return;
}

int main(){
    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;
}