Pagini recente » Cod sursa (job #2809651) | Cod sursa (job #560304) | Cod sursa (job #105603) | Cod sursa (job #3209447) | Cod sursa (job #1537230)
#include <bits/stdc++.h>
using namespace std;
#define READ_FROM_FILE
int qs_partition(int l, int r, vector<int> &v)
{
int poz = rand() % (r-l+1) + l; // alegem pivot random
int pivot = v[poz]; // retinem valoare pivotului
int nr = 0; // numere <= cu pivotul
swap(v[poz], v[r]); // mutam pivotul in dreapta
// ducem in stanga toate numerele <= cu pivotul
for(int i=l;i<r;++i)
if(v[i] <= pivot)
swap(v[l+(++nr)-1], v[i]);
// mutam pivotul pe pozitia corecta
swap(v[l+nr], v[r]);
// returnam pozitia finala a pivotului
return l+nr;
}
void quick_sort(int l, int r, vector<int> &v)
{
if(l < r)
{
int p = qs_partition(l, r, v);
quick_sort(l, p-1, v);
quick_sort(p+1, r, v);
}
}
int main()
{
#ifdef READ_FROM_FILE
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
#endif // READ_FROM_FILE
int N, x;
vector<int> v;
cin>>N;
srand(N);
while(N--)
{
cin>>x;
v.push_back(x);
}
quick_sort(0, v.size()-1, v);
for(auto x : v) cout<<x<<" ";
return 0;
}