Pagini recente » Cod sursa (job #1344284) | Cod sursa (job #2673367) | Cod sursa (job #2262839) | Cod sursa (job #2074197) | Cod sursa (job #946680)
Cod sursa(job #946680)
#include <vector>
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
vector<int> v;
class quickSort{
inline int partitioneaza(vector<int> &v, int st, int dr){
// imi iau un pivot in jurul caruia voi aranaja elementele adica la sfarsit o sa fie ceva in genul
// [st..poz] elementele din intervalul asta vor fi <= cu pivotul iar intervalul [poz+1, dr] va fi >= cu pivotul
int i = st; int j = dr;
int pivot = v[(st+dr) >> 1];
for(; i<j;){
for(; v[i]<pivot && i<=dr; ++i);// cat timp e corect
for(; v[j]>pivot && j>=st; --j);
// acum v[i] >= pivot si v[j] <= pivot
if (i >= j) return j;
swap(v[i], v[j]);
++i, --j;
}
return 0;
}
void sorteaza(vector<int> &v, int st, int dr){
// partitionez intervalul curent
if (st >= dr) return;
int poz = partitioneaza(v, st, dr);
sorteaza(v, st, poz);
sorteaza(v, poz+1, dr);
}
public:
vector<int> Sort(vector<int> v){
sorteaza(v, 0, v.size()-1);
return v;
}
};
int main(){
int n = 0;
f >> n;
int x = 0;
for(int i=1; i<=n; ++i) f >> x, v.push_back(x);
quickSort X;
v = X.Sort(v);
for(int i=0; i<(int)v.size(); ++i) g << v[i] << " ";
}