Pagini recente » Cod sursa (job #1557110) | Cod sursa (job #2038084) | Cod sursa (job #664584) | Cod sursa (job #1853229) | Cod sursa (job #2076533)
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <fstream>
using namespace std;
int v[5000000];
ifstream in("algsort.in");
ofstream out("algsort.out");
int mediana(int i,int j, int k){
if(((v[i]>=v[j])&&(v[i]<=v[k]))||((v[i]<=v[j])&&(v[i]>=v[k])))return i;
if(((v[j]>=v[i])&&(v[j]<=v[k]))||((v[j]<=v[i])&&(v[j]>=v[k])))return j;
return k;
}
int pivot(int a, int b){
int x,y,z;
srand(time(NULL));
x=rand()%(b-a+1);
srand(time(NULL));
y=rand()%(b-a+1);
srand(time(NULL));
z=rand()%(b-a+1);
return mediana(x,y,z);
}
int partitie_lometo(int pr,int ul){
int piv=v[pivot(pr,ul)];
int i=pr-1;
for(int j=pr;j<=ul;++j){
if(v[j]<piv){
++i;
swap(v[i],v[j]);
}
}
swap(v[i+1],v[ul]);
return (i+1);
}
void QuickSort(int primul,int ultimul){
if(primul<ultimul){
int part=partitie_lometo(primul,ultimul);
QuickSort(primul,part-1);
QuickSort(part+1,ultimul);
}
}
int main()
{int n;
in>>n;
for(int i=0;i<n;i++)in>>v[i];
QuickSort(0,n-1);
for(int i=0;i<n;i++)out<<v[i]<<' ';
return 0;
}