Pagini recente » Cod sursa (job #622050) | Cod sursa (job #2114379) | Cod sursa (job #1358890) | Cod sursa (job #1910726) | Cod sursa (job #803539)
Cod sursa(job #803539)
#include <cstdio>
#include <ctime>
#include <cstdlib>
const int MAX_SIZE(500000);
int v [MAX_SIZE];
int n;
inline void read (void)
{
std::freopen("algsort.in","r",stdin);
std::scanf("%d",&n);
for (int *iterator(v), *end(v + n) ; iterator < end ; ++iterator)
std::scanf("%d",iterator);
std::fclose(stdin);
}
inline void print (void)
{
std::freopen("algsort.out","w",stdout);
for (int *iterator(v), *end(iterator + n) ; iterator < end ; ++iterator)
std::printf("%d ",*iterator);
std::putchar('\n');
std::fclose(stdout);
}
void swap (int a, int b)
{
int temp(v[a]);
v[a] = v[b];
v[b] = temp;
}
int partition (int left, int right)
{
int pivot(std::rand() % (right - left + 1));
pivot += left;
swap(pivot,right);
int store(left);
for (int i(left) ; i < right ; ++i)
if (v[i] <= v[right])
{
swap(i,store);
++store;
}
swap(store,right);
return store;
}
void quicksort (int left, int right)
{
if (left < right)
{
int pivot(partition(left,right));
quicksort(left,pivot - 1);
quicksort(pivot + 1,right);
}
}
int main (void)
{
read();
std::srand(std::time(0));
quicksort(0,n - 1);
print();
return 0;
}