Cod sursa(job #474968)

Utilizator andra23Laura Draghici andra23 Data 5 august 2010 16:50:10
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include<iostream>
#include<fstream>
#include<time.h>
#include<unistd.h>
#define N 100000

using namespace std;

int a[500010];
ofstream g;

int partition(int lo, int hi){
    int i = lo, j = hi;
    int aux;
    int loc = lo;
    while (i < j){
        while ( j != loc && a[j] >= a[loc])
            j--;
        if (a[j] < a[loc]){
            aux = a[loc];
            a[loc] = a[j];
            a[j] = aux; 
            loc = j;
        }
        while ( i != loc && a[i] <= a[loc])
            i++;
        if (a[i] > a[loc]){
            aux = a[loc];
            a[loc] = a[i];
            a[i] = aux; 
            loc = i;
        }
    }
    return loc;
}

void quick(int lo, int hi){
    int x, nx, aux, i, j;
    if (lo < hi){
        nx = partition(lo, hi);
        quick(lo, nx-1);
        quick(nx+1, hi);
    }    
}

int main(){
    ifstream f("algsort.in");
    g.open("algsort.out");
    int n, i;
    f>>n;
    srand(getpid());
    for (i = 0; i < n; i++)
        f>>a[i];
    
    quick(0, n-1);
    
    for (i = 0; i < n; i++)
        g<<a[i]<<" ";
    g<<'\n';
     
    return 0;
}