Cod sursa(job #1230625)

Utilizator andreey_047Andrei Maxim andreey_047 Data 18 septembrie 2014 18:06:40
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <cstdio>
#include <algorithm>
#define nmax 500001
using namespace std;
int a[nmax],n,k;
int pivot(int st,int dr){
 int i,piv,j;
 piv = a[st];
 i = st+1;
 j = dr;
 while(i<j){
    if(a[i] < piv) i++;
    if(a[j] >= piv) j--;
    if(i < j && a[i] >= piv && a[j] < piv){
        swap(a[i],a[j]);
        i++;j--;
    }
 }
  a[st] = a[i-1];
  a[i-1] = piv;
  return i-1;
}
void Qsort(int st,int dr){
    if(st < dr){
        k = pivot(st,dr);
        if(st < k-1) Qsort(st,k-1);
        if(k+1 < dr) Qsort(k+1,dr);
    }
}
int main(){
    int i;
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d",&n);
    for(i = 1; i <= n; i++)
        scanf("%d",&a[i]);
        Qsort(1,n);
    for(i=1;i<=n;i++)
         cout << a[i]<<' ';
    return 0;
}