Cod sursa(job #1259872)

Utilizator andreiblaj17Andrei Blaj andreiblaj17 Data 10 noiembrie 2014 17:44:33
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.55 kb
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
#include <cstring>

using namespace std;

#define nmax 500005

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

int n;
int V[nmax];
int i, j, num;
string s;

void read()
{
    fin >> n;
    
    getline(fin, s);
    
    j = 0;
    
    for (i=0; i<s.size(); i++)
    {
        if (isspace(s[i]))
        {
            V[++j] = num;
            num = 0;
        }
        else
            num = num * 10 + (int(s[i]) - 48);
    }
    
    if (num)
        V[++j] = num;
    
}

void suffle()
{
    int j;
    srand(time(0));
    for (i=1; i<=n; i+=3)
        j = (rand()%n) + 1,
        swap(V[i], V[j]);
}

void qs(int st, int dr)
{
    int i, j;
    bool dir;
    
    if (st < dr)
    {
        i = st;
        j = dr;
        dir = true;
        while (i != j)
        {
            if (dir)
            {
                if (V[i] <= V[j])
                    i++;
                else
                    swap(V[i], V[j]),
                    dir = false,
                    j--;
            }
            else
            {
                if (V[i] <= V[j])
                    j--;
                else
                    swap(V[i], V[j]),
                    dir = true,
                    i++;
            }
        }
        qs(st, i-1);
        qs(i+1, dr);
    }
}

void write()
{
    for (i=1; i<=n; i++)
        fout << V[i] << " ";
    fout << "\n";
}

int main()
{
    
    read();
    suffle();
    qs(1, n);
    write();
    
    fin.close();
    fout.close();
    
    return 0;
}