Cod sursa(job #790155)

Utilizator sory1806Sandu Sorina-Gabriela sory1806 Data 20 septembrie 2012 16:12:03
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

std::ifstream f("algsort.in");
std::ofstream g("algsort.out");

std::vector<int> v;

void read()
{
    int n, x;

    f >> n;
    for (int i = 0; i < n; i ++) {
        f >> x;
        v.push_back(x);
    }
}

void write()
{
    for (int i = 0; i < (int) v.size(); i ++) {
        g << v[i] << ' ';
    }
}

int partition(int first, int last)
{
    int i, j;

    i = j = first + 1;

    while(j <= last) {
        if (v[j] < v[first]) {
            std::swap(v[i], v[j]);
            i ++;
        }
        j ++;
    }
    std::swap(v[i - 1], v[first]);

    return i - 1;
}

void quicksort(int first, int last)
{
    if (first >= last) {
        return;
    }

    int k = partition(first, last);

    quicksort(first, k - 1);
    quicksort(k + 1, last);
}

int main()
{
    read();
    quicksort(0, v.size() - 1);
    write();

    return 0;
}