Cod sursa(job #797409)

Utilizator claudiumihailClaudiu Mihail claudiumihail Data 13 octombrie 2012 23:18:05
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <iterator>
#include <cstdlib>

using namespace std;

typedef unsigned int uint32;

void do_partition(vector<uint32>& vec, int& start, int& end, uint32 pivotValue)
{
    while (start < end)
    {
        while (vec[start] < pivotValue) start++;
        while (pivotValue < vec[end]) end--;
        
        if (start <= end)
        {
            swap(vec[start], vec[end]);
            start++;
            end--;
        }
    }
}

void quicksort(vector<uint32>& vec, int start, int end)
{
    if (start < end)
    {
        int pivot = start + rand()%(end-start);
        int new_start = start;
        int new_end = end;
        
        do_partition(vec, new_start, new_end, vec[pivot]);
        
        quicksort(vec, start, new_end);
        quicksort(vec, new_start, end);
    }
}

int main()
{
    int n;
    vector<uint32> vec;
    fstream fin("algsort.in", fstream::in);
    fstream fout("algsort.out", fstream::out);
    
    fin >> n;
    
    vec.reserve(n);
    
    istream_iterator<uint32> inIt(fin);
    istream_iterator<uint32> eofIt;
    
    copy(inIt, eofIt, back_inserter(vec));
    
    quicksort(vec, 0, n-1);
    
    ostream_iterator<uint32> outIt(cout, " ");
    copy(vec.begin(), vec.end(), outIt);

    return 0;
}