Cod sursa(job #1754389)

Utilizator sulzandreiandrei sulzandrei Data 8 septembrie 2016 01:04:15
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <algorithm>
using namespace std;

#define nmax 500003
/////////////////////////////////////////////////
////////
////////           quicksort Lomuto partition scheme
////////
/////////////////////////////////////////////////
int lpartition(int*A, int lo, int hi)
{
    int pivot = A[hi];//alegem pivotul ca fiind elementul din dreapta de tot
    int i = lo;//consideram i sfarsitul multimii elementelor <= pivot
    for(int j = lo ; j< hi ; j++)//trecem prin toate elementele de la stanga la dreapta
        if (A[j] <= pivot)//si cand gasim un element <= pivotul
        {
            swap(A[i],A[j]);//crestem multimea elementelor <= pivot
            i++;
        }
    swap(A[i],A[hi]);//si la final adaugam la sfarstiul miltimii pe pivot deci o sa avem in stanga toate
    //elementele <=pivotul si in dreapta >= pivotul
    return i;
}
void lquicksort(int *A, int lo, int hi)//O(n) worst case pt cazul cand sunt aproape sortate
{
    if(lo <hi)
    {
        int p = lpartition(A,lo,hi);
        lquicksort(A,lo,p-1);
        lquicksort(A,p+1,hi);
    }
}

ifstream in("algsort.in");
ofstream out("algsort.out");
int main()
{
    int n,i;
    in >> n;

    int heap[n+1];
    for( i = 0 ; i < n ; i++)
        in >> heap[i];
    lquicksort(heap,0,n-1);
    for(int i = 0 ; i < n ; i ++)
        out << heap[i] << " ";
    return 0;
}