Cod sursa(job #1354225)

Utilizator iorguiorgu bardan iorgu Data 21 februarie 2015 18:23:08
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#include <algorithm>
#include <cstdlib>
using namespace std;

// Constante
const int sz = 500001;

// Functii
void quickSort(int left, int right);

// Variabile
ifstream in("algsort.in");
ofstream out("algsort.out");

int num;
int values[sz];

// Main
int main()
{
    srand(7712);
    in >> num;
    for(int i=1 ; i<=num ; ++i)
        in >> values[i];

    quickSort(1, num);

    for(int i=1 ; i<=num ; ++i)
        out << values[i] << ' ';
    out << '\n';

    in.close();
    out.close();
    return 0;
}

void quickSort(int left, int right)
{
    int currentLeft = left;
    int currentRight = right;
    int point = values[rand()%(right-left+1) + left];

    while(currentLeft <= currentRight)
    {
        while(values[currentLeft] < point)
            ++currentLeft;
        while(point < values[currentRight])
            --currentRight;

        if(currentLeft <= currentRight)
            swap(values[currentLeft++], values[currentRight--]);
    }

    if(left < currentRight)
        quickSort(left, currentRight);
    if(currentLeft < right)
        quickSort(currentLeft, right);
}