Pagini recente » Cod sursa (job #571900) | Cod sursa (job #1317851) | Cod sursa (job #1045795) | Cod sursa (job #1267513) | Cod sursa (job #2669250)
#include <iostream>
#include <fstream>
#include <vector>
#include <stdlib.h>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
inline int randBetween(int lb, int ub)
{
return lb + rand() % (ub - lb + 1);
}
inline int choosePivot(int lb, int ub)
{
return (lb + ub) / 2;
}
inline int chooseRandomPivot(int lb, int ub)
{
return randBetween(lb, ub);
}
void quickSort(vector<int> &v, int lb, int ub)
{
if(lb >= ub)
return;
int piv = chooseRandomPivot(lb, ub);
swap(v[piv], v[ub]);
int left = lb;
int right = ub - 1;
while(left <= right)
{
while(v[left] < v[ub])
left++;
while(v[right] >= v[ub] && right >= left)
right--;
if(left < right)
swap(v[left], v[right]);
}
swap(v[left], v[ub]);
piv = left;
quickSort(v, lb, piv - 1);
quickSort(v, piv + 1, ub);
}
int main()
{
srand(time(NULL));
int n;
fin >> n;
vector<int> v(n);
for(int &x : v)
fin >> x;
quickSort(v, 0, v.size() - 1);
for(int x : v)
fout << x << ' ';
return 0;
}
// 1 2 3 4 5 6 7 8
// 3 7 2 5 8 5 9 4
// 64 * 100 = 6400 = 100kb * 600 = 60 000 = 60 MB