Cod sursa(job #1131989)

Utilizator toncuvasileToncu Vasile toncuvasile Data 2 martie 2014 13:14:22
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
// Infoarena. Arhiva Educationala. Sortarea Prin Comparatie.
#include<iostream>
#include<fstream>
#include<cstdlib>
using namespace std;

void QuickSort(long int *,int,int);
int Partition(long int*,int,int);

int main(){
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);

    long int *A; int n;
    cin>>n;
    A=new long int[n+5];

    for(int i=0;i<n;i++) cin>>A[i];

    QuickSort(A,0,n-1);

    for(int i=0;i<n;i++) cout<<A[i]<<" ";
}

void QuickSort(long int *A,int start,int end){
    if(start<end){
        int pIndex=Partition(A,start,end);
        QuickSort(A,start,pIndex-1);
        QuickSort(A,pIndex+1,end);
    }
}

int Partition(long int *A,int st,int dr){
    int p=st+rand()%(dr-st+1);
    long int pivot=A[p];

    while(st<dr){
        while(A[st]<pivot) st++;
        while(A[dr]>pivot) dr--;
        swap(A[st],A[dr]);
        if( (A[st]==A[dr]) /* && (A[dr]==pivot)*/ ){
            st++;
        }
    }

    return dr;
}