Pagini recente » Cod sursa (job #72196) | Cod sursa (job #2081392) | Cod sursa (job #1914973) | Cod sursa (job #1658720) | Cod sursa (job #1017917)
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
ifstream f ("algsort.in");
ofstream g ("algsort.out");
int n, v[500002];
void quicksort(int v[20], int a=1, int b=n)
{
int i=a, j=b, p=v[(a+b)/2]; // v[i=a ... p ... j = b]
while(i <= j) // cat timp i nu a ajuns la j
{
while(v[i] < p) i++; // crestem i pana ajungem la pivot
while(v[j] > p) j--; // scadem j pana la pivot
if(i <= j) // daca elementele la care ne-am oprit sunt de parti opuse ale pivotului
{
int aux = v[i];
v[i] = v[j];
v[j] = aux; // le interschimbam valorile
i++; j--; // si le lasam sa continue drumul
}
}
if(a < j) quicksort(v,a,j); // apelam QS in subvectorul din stanga
if(i < b) quicksort(v,i,b); // apelam QS in dreapta
}
int main()
{
f >> n;
for(int i=1; i<=n; i++) f >> v[i];
quicksort(v);
for(int i=1; i<=n; i++) g << v[i] << ' ';
return 0;
}