Pagini recente » Cod sursa (job #2633095) | Cod sursa (job #1394501) | Cod sursa (job #133874) | Cod sursa (job #2327933) | Cod sursa (job #810617)
Cod sursa(job #810617)
#include <cstdio>
#include <cstdlib>
#include <ctime>
const int MAX_SIZE(500000);
int n;
int v [MAX_SIZE];
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(v + n) ; iterator < end ; ++iterator)
std::printf("%d ",*iterator);
std::putchar('\n');
std::fclose(stdout);
}
int partition (int left, int right)
{
int pivot(left + std::rand() % (right - left + 1)), temp;
temp = v[pivot];
v[pivot] = v[right];
v[right] = temp;
pivot = v[right];
int store(left), index(left);
while (index < right)
{
if (v[index] <= pivot)
{
temp = v[store];
v[store] = v[index];
v[index] = temp;
++store;
}
++index;
}
temp = v[store];
v[store] = v[right];
v[right] = temp;
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)
{
std::srand(std::time(0));
read();
quicksort(0,n - 1);
print();
return 0;
}