Pagini recente » Cod sursa (job #562960) | Cod sursa (job #1089262) | Cod sursa (job #1324864) | Cod sursa (job #2037440) | Cod sursa (job #867067)
Cod sursa(job #867067)
#include <fstream>
#include <stdlib.h>
#include <time.h>
#define NMAX 500004
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
int N,V[NMAX];
void PartitionLumoto(int left,int right, int &poz)
{
int pivot = V[right], st = left,aux;
poz = left-1;
while(st <= right)
{
if(V[st] <= pivot)
poz++,aux = V[st],V[st] = V[poz], V[poz] = aux;
st++;
}
if(poz>=right)
poz--;
}
void Partition(int left,int right,int &poz)
{
int st = left, dr = right, pivot = V[poz], aux;
while(st<dr)
{
// <-
while(V[dr]>pivot && dr>poz) dr--;
if(V[dr] < pivot)
V[poz] = V[dr], V[dr] = pivot, poz = dr;
while(V[st]<pivot && st<poz) st++;
if(V[st] > pivot)
V[poz] = V[st], V[st] = pivot, poz = st;
}
}
void QSort(int left,int right)
{
if(left >= right)return;
int poz = left; //+ rand()%(right-left+1);
PartitionLumoto(left,right,poz);
QSort(left,poz),QSort(poz+1,right);
}
int main()
{
int i;
in>>N;
for(i=1;i<=N;i++)
in>>V[i];
srand(time(NULL));
QSort(1,N);
for(i=1;i<=N;i++)
out<<V[i]<<' ';
return 0;
}