Pagini recente » Cod sursa (job #134000) | Cod sursa (job #2909126) | Cod sursa (job #1939604) | Cod sursa (job #1604152) | Cod sursa (job #1754389)
#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;
}