Cod sursa(job #1151786)

Utilizator roxanamacsim17Macsim Roxana roxanamacsim17 Data 24 martie 2014 12:56:02
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include<fstream>
using namespace std;
int a[500005],n;
void citire()
{ifstream fin("algsort.in");
    fin>>n;
    for(int i=0;i<n;++i)
    fin>>a[i];
    //fin.close();
    }
    void afisare()
    {
        ofstream g("algsort.out");
       for(int i=0;i<n;++i)
        g<<a[i]<<' ';
        //g<<'\n';
        //g.close();
    }
    int divide(int p,int q){
    int st=p,dr=q,x=a[p];
    while(st<dr)
    {while(st<dr &&a[dr]>=x) dr--;
    a[st]=a[dr];
    while(st<dr &&a[st]<=x) st++;
    a[dr]=a[st];
    }
    a[st]=x;
    return st;
    }
    void qsort(int p,int q)
    {
        int m=divide(p,q);
        if(m-1>p) qsort(p,m-1);
        if(m+1<q) qsort(m+1,q);
    }
    void quickSort(int arr[], int left, int right)
 {
  int i = left, j = right;
  int tmp;
  int pivot = arr[(left + right) / 2];

  /* partition */
  while (i <= j) {
        while (arr[i] < pivot)
              i++;
        while (arr[j] > pivot)
              j--;
        if (i <= j) {
              tmp = arr[i];
              arr[i] = arr[j];
              arr[j] = tmp;
              i++;
              j--;
    }
}
/* recursion */
if (left < j)
    quickSort(arr, left, j);
if (i < right)
        quickSort(arr, i, right);
}
    int main(){
    citire();
    quickSort(a,0,n-1);
    //qsort(0,n-1);
    afisare();
    return 0;
    }