Pagini recente » Cod sursa (job #334640) | Cod sursa (job #97425) | Clasament simulare_oji2018 | Cod sursa (job #2883556) | Cod sursa (job #2025928)
#include <iostream>
#include <fstream>
#include <math.h>
#define nmax 500000
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n;
long long a[nmax+5];
void Insertion_Sort(long long arr[],int n)
{
int i,key,j;
for(i=2;i<=n;i++)
{
key=arr[i];
j=i-1;
while(j>=0 && arr[j]>key)
{
arr[j+1]=arr[j];
j--;}
arr[j+1]=key;
}
}
void merge_Sort(long long arr[],int l,int m, int r)
{
long long R[(nmax+5)/2],L[(nmax+5)/2];
for(int Ri=1,i=l;i<=m;i++,Ri++)
R[Ri]=arr[i];
for(int Li=1,i=m+1;i<=r;Li++,i++)
L[Li]=arr[i];
int i=0,j=0,k=l;
int n1 = m - l + 1;
int n2 = r - m;
while (i < n1 && j < n2)
{
if (L[i] <= R[j])
{
arr[k] = L[i];
i++;
}
else
{
arr[k] = R[j];
j++;
}
k++;
}
while (i < n1)
{
arr[k] = L[i];
i++;
k++;
}
while (j < n2)
{
arr[k] = R[j];
j++;
k++;
}
}
void Merge_Sort(long long arr[],int l, int r)
{
if(l<r)
{
int m=l+(r-l)/2;
Merge_Sort(arr,l,m);
Merge_Sort(arr,m+1,r);
merge_Sort(arr,l,m,r);
}
}
void Quick_Sort(long long arr[],int l,int r)
{
int i=l,j=r;
int tmp;
int pivot=arr[l+(r-l)/2];
while(i<=j)
{
while(arr[i]<pivot)
i++;
while(arr[j]>pivot)
j++;
if(i<=j)
{
tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
i++;
j++;
}
}
if (l < j)
Quick_Sort(arr, l, j);
if (i < r)
Quick_Sort(arr, i, r);
}
void Intro_Sort(long long arr[],int n)
{
if(n<=16)
Insertion_Sort(arr,n);
else if(log(n)==0)
Merge_Sort(arr,1,n);
else
Quick_Sort(arr,1,n);
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
fin>>a[i];
Intro_Sort(a,n);
for(int i=1;i<=n;i++)
if(i==n)
fout<<a[i];
else
fout<<a[i]<<" ";
return 0;
}