Pagini recente » Cod sursa (job #945993) | Cod sursa (job #940637) | Cod sursa (job #373512) | Cod sursa (job #1611692) | Cod sursa (job #2607495)
#include <bits/stdc++.h>
#define NMAX 500001
#define MOD 666013
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int v[NMAX],n;
void InsertionSort(int st,int dr)
{
for(int i = st+1; i<=dr; ++i)
{
int temp = v[i];
int j = i - 1;
while(j >= 1 && temp < v[j])
{
v[j+1] = v[j];
j--;
}
v[j+1] = temp;
}
}
//int pivot(int st,int dr)
//{
// int d = 0;
// swap(v[st],v[(st+dr)/2]);
// while(st < dr)
// {
// if(v[st] > v[dr])swap(v[st],v[dr]), d = 1 - d;
// st += d;
// dr -= 1-d;
// }
// return st;
//}
int pivot(int st,int dr)
{
int piv = v[(st+dr)/2];
int i = st,j = dr;
while(st <= dr)
{
while(v[i] < piv)i++;
while(v[j] > piv)j--;
if(i < j)
{
swap(v[i],v[j]);
i++,j--;
}
}
return piv;
}
void quicksort(int st,int dr)
{
if(st < dr)
{
if(st + 50 > dr)InsertionSort(st,dr);
else
{
int p = pivot(st,dr);
quicksort(st,p-1);
quicksort(p+1,dr);
}
}
}
void citire()
{
f >> n;
for(int i=1;i<=n;++i)
f >> v[i];
}
void afis()
{
quicksort(1,n);
for(int i=1;i<=n;++i)
g << v[i] << ' ';
}
int main()
{
citire();
afis();
}