Pagini recente » Cod sursa (job #2621355) | Cod sursa (job #3275773) | Cod sursa (job #2329720) | Cod sursa (job #3122160) | Cod sursa (job #472408)
Cod sursa(job #472408)
#include <stdio.h>
#include<iostream>
#include <fstream>
unsigned int a[500005], n;
using namespace std;
inline void swap(int i, int j)
{
int aux = a[i];
a[i] = a[j];
a[j] = aux;
}
inline int partition(int l, int r)
{
register int p = l-1, i;
i = rand()%(r-l+1)+l;
swap(i,r);
// a[l...p] <= a[r]
// a[p+1...i] >= a[r]
// deci p indica ultimul element < pivotul
for (i=l;i<r;++i)
if(a[i]<a[r])
swap(++p,i);
swap(++p,r);
return p;
}
void quicksort(int l, int r)
{
if(l>=r) return;
int p = partition(l,r); // p -> pozitia pivotului
quicksort(l,p-1);
quicksort(p+1,r);
}
int main()
{
register int i;
ifstream in("algsort.in");
ofstream out("algsort.out");
in>>n;
for(i=1;i<=n;i++) in>>a[i];
quicksort(1,n);
for(i=1;i<=n;i++) out<<a[i]<<" ";
out.close();
return 0;
}