Pagini recente » Cod sursa (job #737756) | Cod sursa (job #459373) | Cod sursa (job #365000) | Cod sursa (job #2606756) | Cod sursa (job #1502611)
#include <fstream>
#include <queue>
#include <cstring>
#include <ctime>
#include <stdlib.h>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
const int NMAX = 500001;
int N;
int v[NMAX];
void read() {
fin >> N;
for(int i = 1 ; i <= N; ++i)
fin >> v[i];
}
void quicksort(int st, int dr) {
if(dr <= st) return;
int pivot = rand() % (dr - st) + st;
int left = st; int right = dr;
pivot = dr;
swap(v[pivot], v[dr]);
dr--;
while(st < dr) {
while(st < dr && v[st] <= v[pivot]) ++st;
while(st < dr && v[dr] >= v[pivot]) --dr;
swap(v[st], v[dr]);
}
//st este separatorul
if(v[st] > v[pivot] )
swap(v[pivot], v[st]);
if(left < st)
quicksort(left, dr);
if(st + 1 < right)
quicksort(st + 1, right);
}
int main() {
read();
srand(time(NULL));
quicksort(1, N);
for(int i = 1; i <= N; i++)
fout << v[i] << " ";
return 0;
}