Cod sursa(job #1280738)

Utilizator cdascaluDascalu Cristian cdascalu Data 2 decembrie 2014 13:20:18
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <stdio.h>
#include <fstream>
#include <queue>
#define Nmax 500001
using namespace std;

void swapVec(int x, int y, int v[])
{
    if(x == y)return;

    v[x] = v[x] ^ v[y];
    v[y] = v[x] ^ v[y];
    v[x] = v[x] ^ v[y];
}
void quickSort(int left, int right, int v[])
{
    if(left >= right)
        return;

    if(left + 1 == right)
    {
        if(v[left] > v[right])
            swapVec(left, right, v);

        return;
    }

    int pivot = (left + right)/2;

    swapVec(pivot, right, v);

    int l = left, r = right - 1;

    while(l < r)
    {
        while(v[l] <= v[right] && l <= r)++l;

        while(v[r] >= v[right] && l <= r)--r;

        if(l >= r)
            continue;

        swapVec(l, r, v);
    }

    swapVec(right, l, v);

    quickSort(left, l - 1, v);
    quickSort(l+1, right, v);
}
int main()
{
    ifstream f("algsort.in");
    ofstream g("algsort.out");
    int N, v[Nmax];
    f>>N;
    for(int i = 1;i <= N;++i)
        f>>v[i];

    f.close();

    quickSort(1, N, v);

    for(int i=1;i<=N;++i)
        g<<v[i]<<" ";
    g.close();
    return 0;
}