归并排序

来源:互联网 发布:让其响彻mmd动作数据 编辑:程序博客网 时间:2024/06/05 08:31
#include<stdio.h>#include<stdlib.h>#define SIZE 10000#define MAX 100000int num[SIZE+1];void __merge(int l,int r)/**左右二路归并*/{int n1=(r+l)/2-l+1,i,j;int n2=r-(r+l)/2;int L[SIZE+1],R[SIZE+1];for(i=1;i<=n1;i++)L[i]=num[l+i-1];for(j=1;j<=n2;j++)R[j]=num[(r+l)/2+j];L[n1+1]=MAX;R[n2+1]=MAX;i=j=1;for(int k=l;k<=r;k++)if(L[i]<=R[j])num[k]=L[i++];elsenum[k]=R[j++];}void mergeSort(int p,int r)/**递归分治*/{if(p<r){int mid=(p+r)/2;mergeSort(p,mid);mergeSort(mid+1,r);__merge(p,r);}}int main(){int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&num[i]);mergeSort(1,n);for(int i=1;i<=n;i++)printf("%d ",num[i]);return 0;}

原创粉丝点击