Merge Sort

#include <iostream>
using namespace std;
#define siz 100000000

int a[siz], b[siz];

void merge(int low, int mid, int high)
{
    int 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(int k=j;k<=high;k++)
            b[i++]=a[k];
    else
        for(int k=h;k<=mid;k++)
            b[i++]=a[k];

    for(int k=low;k<=high;k++) a[k]=b[k];
}
void merge_sort(int low, int high)
{
    if(low<high)
    {
        int mid=(low+high)/2;
        merge_sort(low,mid);
        merge_sort(mid+1,high);
        merge(low,mid,high);
    }
}
int main()
{
    int n;
    while(cin>>n)
    {
        for(int i=1;i<=n;i++) cin>>a[i];
        merge_sort(0,n);
        for(int i=1;i<=n;i++) cout<<a[i]<<endl;
    }
    return 0;
}

No comments:

Post a Comment