Cod sursa(job #241569)

Utilizator MciprianMMciprianM MciprianM Data 10 ianuarie 2009 13:55:31
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<fstream>
#include<algorithm>
using namespace std;
int a[500009];
int part(int st,int dr,int& ok){
  int i, j,ii, jj,aux;
  i=st;j=dr;
  ii=1;
  jj=0;
  while(i<j){
    if(a[i]>a[j]){
      swap(a[i],a[j]);
      aux=-ii;
      ii=-jj;
      jj=aux;
      ok++;
    }
    i+=ii;j+=jj;
  }
  return i;
}
void bubblesort(int st, int dr){
  int ok=1;int i;
  while(ok){
    ok=0;
    for(i=st+1;i<=dr;i++)
      if(a[i-1]>a[i])
        swap(a[i],a[i-1]),ok=1;
  }
}
void sortrap(int p, int u){
  if(p<u){
      int ok=0;
      int m=part(p,u,ok);
      if(ok>2){
        sortrap(p,m-1);
        sortrap(m+1,u);
      }
      else{
        bubblesort(p,u);
      }
  }
}
int main(){
  ifstream f("algsort.in");
  ofstream g("algsort.out");
  int n,i;
  f>>n;
  for(i=0;i<n;i++)
    f>>a[i];
  f.close();
  sortrap(0,n-1);
  for(i=0;i<n;i++)
    g<<a[i]<<' ';
  g<<'\n';
  g.close();
  return 0;
}