归并排序

来源:互联网 发布:网络女主播自我介绍 编辑:程序博客网 时间:2024/05/16 01:37

分成1 2元数组排序,然后逐步归并两个数组。

#include <iostream>#include <stdio.h>#include <string.h>using namespace std;#define T 1000000#define INF 999999int n,a[T],tmp[T];void bs(int *a, int l, int r){    int t=(l+r)/2;    int c1=l,c2=t+1;    for(int i=l;i<=r;i++)    {        if(a[c1]<a[c2]) tmp[i]=a[c1++];        else tmp[i]=a[c2++];        if(c2>r)        for(i=i+1;i<=r;i++)        tmp[i]=a[c1++];         if(c1>t)        for(i=i+1;i<=r;i++)        tmp[i]=a[c2++];    }    for(int i=l;i<=r;i++)        a[i]=tmp[i];}void msort(int *a,int l,int r){    if(l>=r) return ;    if(l+1==r)    {        if(a[l]>a[r]) swap(a[l],a[r]);        return ;    }    int t=(r+l)/2;    msort(a,l,t);    msort(a,t+1,r);    bs(a,l,r);}int main (){   //freopen("a.txt","r",stdin);    while(scanf("%d",&n)!=EOF)    {        memset(a,0,sizeof(a));        for(int i=0;i<n;i++)        scanf("%d",&a[i]);        msort(a,0,n-1);        int p=(n+1)/2;        printf("%d\n",a[p-1]);        /*for(int i=0;i<n;i++)            cout<<a[i]<<" ";        cout<<endl<<endl<<endl<<endl;*/    }    return 0;}


原创粉丝点击