Pagini recente » Cod sursa (job #2054185) | Cod sursa (job #1361638) | Cod sursa (job #3200092) | Cod sursa (job #2126066)
#include <iostream>
#include <cstdlib>
#include <fstream>
#define nMax 500003
#define SWAP(a, b) (v[0] = v[a], v[a] = v[b], v[b] = v[0])
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n;
int v[nMax];
int partition(int lo, int hi){
int pivot = lo + (rand() % (hi - lo + 1));
SWAP(pivot, hi);
pivot = hi --;
while(lo < hi){
if(v[lo] >= v[pivot]){
SWAP(lo, hi);
-- hi;
}
else{
++ lo;
}
}
if(v[lo] >= v[pivot]){
SWAP(lo, pivot);
}
else{
SWAP(lo + 1, pivot);
}
return pivot;
}
void quick(int lo, int hi){
if(lo >= hi){
return;
}
int pivot = partition(lo, hi);
quick(lo, pivot - 1);
quick(pivot + 1, hi);
return;
}
int main(){
fin>>n;
for(int i = 1; i <= n; i ++){
fin>>v[i];
}
quick(1, n);
for(int i = 1; i <= n; i ++){
fout<<v[i]<<" ";
}
return 0;
}