Cod sursa(job #1330710)

Utilizator ovidiuz98Zamfir Ovidiu ovidiuz98 Data 30 ianuarie 2015 21:46:05
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>
#include <stdlib.h>
#include <time.h>
#define DIM 500002

using namespace std;

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

int N,v[DIM],k;
char s[4*DIM];
int part(int p,int u){
    int x=p+rand()%(u-p+1);
    swap(v[p],v[x]);
    int i=p,j=u;
    int ii=0,jj=-1;
    while(i!=j){
        if(v[i]>v[j]){
            swap(v[i],v[j]);
            swap(ii,jj);
            ii*=-1;
            jj*=-1;
        }
        i+=ii;
        j+=jj;
    }
    return i;
}
void quicksort(int p,int u){
    if(p>=u)
        return;
    int poz=part(p,u);
    if(p<poz-1)
        quicksort(p,poz-1);
    if(u>poz+1)
        quicksort(poz+1,u);
}
int main(){
    fin>>N;
    fin.get();
    fin.get(s,6*DIM);
    for(int i=0;s[i]!=0;i++)
        if(s[i]>='0' && s[i]<='9'){
            ++k;
            while(s[i]>='0' && s[i]<='9')
                v[k]=v[k]*10+s[i]-'0',i++;
        }
    srand(time(0));
    quicksort(1,N);
    for(int i=1;i<=N;i++)
        fout<<v[i]<<" ";
    fin.close();fout.close();
    return 0;
}