Pagini recente » Cod sursa (job #3267556) | Cod sursa (job #1049668) | Cod sursa (job #2324299) | Cod sursa (job #1676170) | Cod sursa (job #1669918)
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int a[500001],n,i,m;
void merge(int,int,int);
void merge_sort(int low,int high)
{
int mid;
if(low<high)
{
mid = low + (high-low)/2; //This avoids overflow when low, high are too large
merge_sort(low,mid);
merge_sort(mid+1,high);
merge(low,mid,high);
}
}
void merge(int low,int mid,int high)
{
int h,i,j,b[500001],k;
h=low;
i=low;
j=mid+1;
while((h<=mid)&&(j<=high))
if(a[h]<=a[j]) b[i++]=a[h++];
else b[i++]=a[j++];
if(h>mid)
for(k=j;k<=high;k++)
b[i++]=a[k];
else
for(k=h;k<=mid;k++)
b[i++]=a[k];
for(k=low;k<=high;k++) a[k]=b[k];
}
int main()
{
f>>n; for(i=1;i<=n;i++) f>>a[i];
merge_sort(1,n);
for(i=1;i<=n;i++) g<<a[i]<<' ';
return 0;
}