Pagini recente » Cod sursa (job #2964562) | Cod sursa (job #387294) | Cod sursa (job #2850323) | Cod sursa (job #2983796) | Cod sursa (job #2307709)
#include <fstream>
#include <random>
#include <time.h>
#include <algorithm>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
static const int NMAX = 5e5+5;
int n;
int v[NMAX];
int part(int arr[], int low, int high)
{
int pivot = arr[high];
int i = low -1;
for(int j = low; j < high; ++j)
{
if(arr[j] <= pivot)
{
i++;
swap(arr[i], arr[j]);
}
}
swap(arr[high], arr[i+1]);
return i+1;
}
int r_part(int arr[], int low, int high)
{
srand(time(NULL));
int random1 = rand() % (high - low + 1) + low;
int random2 = rand() % (high - low + 1) + low;
int random3 = rand() % (high - low + 1) + low;
int random = (random1 + random2 + random3) - min(random1,min(random2,random3)) -
max(random1,max(random2,random3));
swap(arr[random],arr[high]);
return part(arr,low,high);
}
void Quicksort(int arr[], int low, int high)
{
if(low < high)
{
int pi = r_part(arr,low,high);
Quicksort(arr,low, pi -1);
Quicksort(arr, pi+1, high);
}
}
void ReadInput()
{
fin >> n;
for(int i =1; i<= n;++i)
fin >> v[i];
}
void PrintOutput()
{
for(int i =1; i<= n;++i)
fout << v[i] << " ";
}
int main()
{
ReadInput();
Quicksort(v,1,n);
PrintOutput();
return 0;
}