Pagini recente » Cod sursa (job #2415629) | Cod sursa (job #552771) | Cod sursa (job #1047415) | Cod sursa (job #2912635) | Cod sursa (job #1019347)
#include <cstdio>
#include <ctime>
#include <cstdlib>
using namespace std;
int v[500000];
void sort (int *v, int n);
void swap (int &a, int &b);
void quicksort (int *v, int left, int right);
int partition (int *v, int left, int right);
void sort (int *v, int n)
{
quicksort(v, 0, n - 1);
}
void swap (int &a, int &b)
{
int tmp = a;
a = b;
b = tmp;
}
void quicksort (int *v, int left, int right)
{
if (left < right)
{
int pi = partition (v, left, right);
quicksort (v, left, pi - 1);
quicksort (v, pi + 1, right);
}
}
int partition (int *v, int left, int right)
{
srand(time(NULL));
int pivot = left + rand() % (right - left);
swap (v[right], v[pivot]);
int store = left;
for (int i = left; i < right; ++i)
if (v[i] < v[right])
{
swap (v[i], v[store]);
++store;
}
swap (v[store], v[right]);
return store;
}
int main()
{
FILE *fin, *fout;
fin = fopen ("algsort.in", "r");
fout = fopen ("algsort.out", "w");
int n;
fscanf (fin, "%d", &n);
for (int i = 0; i < n; ++i)
fscanf (fin, "%d", &v[i]);
sort (v, n);
for (int i = 0; i < n; ++i)
fprintf (fout, "%d ", v[i]);
fclose(fin);
fclose(fout);
return 0;
}