Pagini recente » Cod sursa (job #2639175) | Cod sursa (job #360315) | Borderou de evaluare (job #984920) | Cod sursa (job #495404) | Cod sursa (job #472407)
Cod sursa(job #472407)
#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)
{
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()
{
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;
}