Cod sursa(job #1021802)

Utilizator Dayanna000Amegica Dayanna Dayanna000 Data 4 noiembrie 2013 11:41:43
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include<iostream>
#include<fstream>
#include<ctime>
#include<cstdlib>
using namespace std;
int a[500001];
void qs(int st, int dr)
  {
       int piv,aux,x,y,z,i,j,mi,ma;
       i=st;
       j=dr;
       x=a[rand()%(j-i+1)+i];
       y=a[rand()%(j-i+1)+i];
       z=a[rand()%(j-i+1)+i];
       if(x<=y && x<=z)
          mi=x;
       if(y<=x && y<=z)
          mi=y;
       if(z<=x && z<=y)
          mi=z;
       if(x>=y && x>=z)
          ma=x;
       if(y>=x && y>=z)
          ma=y;
       if(z>=x && z>=y)
          ma=z;
      piv=x+y+z-mi-ma;
      while(i<=j)
      {
       while(a[i]<piv)
          i++;
       while(a[j]>piv)
          j--;
        if(i<=j)
        {
           aux=a[i];
           a[i]=a[j];
           a[j]=aux;
           i++;
           j--;
         }
      }
    if(st<j)
       qs(st,j);
    if(i<dr)
       qs(i,dr);
    }
int main()
{
ifstream f("algsort.in");
ofstream g("algsort.out");
int i,n;
f>>n;
for(i=1;i<=n;i++)
  f>>a[i];
qs(1,n);
for(i=1;i<=n;i++)
  g<<a[i]<<"  ";
f.close();
g.close();
return 0;
}