Pagini recente » Cod sursa (job #718318) | Cod sursa (job #1513347) | Cod sursa (job #1500467) | Cod sursa (job #2065223) | Cod sursa (job #946689)
Cod sursa(job #946689)
#include <vector>
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
vector<int> v;
class quickSort{
inline pair<int,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);// cat timp e corect
for(; v[j]>pivot; --j);
// acum v[i] >= pivot si v[j] <= pivot
if (i <= j){
swap(v[i], v[j]);
++i, --j;
}
}
return make_pair(i, j);
}
void sorteaza(vector<int> &v, int st, int dr){
// partitionez intervalul curent
if (st >= dr) return;
pair<int,int> act = partitioneaza(v, st, dr);
sorteaza(v, st, act.second);
sorteaza(v, act.first, 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] << " ";
}