Cod sursa(job #1351053)

Utilizator somuBanil Ardej somu Data 21 februarie 2015 10:02:04
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
#define nmax 500005

using namespace std;

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

int n;
int A[nmax];

void read() {
    fin >> n;
    for (int i = 1; i <= n; i++)
        fin >> A[i];
}

void qs(int st, int dr) {
    
    if (st > dr)
        return;
    
    int i = st;
    int j = dr;
    int pivot = A[rand() % n + 1];
    
    for (; i <= j;) {
        
        for (; pivot > A[i];) i++;
        for (; pivot < A[j];) j--;
        
        if (i <= j) {
            swap(A[i], A[j]);
            i++, j--;
        }
        
    }
    
    qs(st, j);
    qs(i, dr);
    
}

void solve() {
    qs(1, n);
    for (int i = 1; i <= n; i++)
        fout << A[i] << " ";
}

int main() {
    
    srand(time(NULL));
    read();
    solve();
    
    fin.close();
    fout.close();
    
    return 0;
}