Cod sursa(job #2076533)

Utilizator Andrei243Nitu Mandel Andrei Andrei243 Data 26 noiembrie 2017 18:56:10
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#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;
}