归并排序

来源:互联网 发布:优化环境建设 编辑:程序博客网 时间:2024/04/27 22:37

归并排序步骤:
1.划分子问题
2.递归求解
3.合并

分治法分一种
时间复杂度:O(nlogn)
比快速排序更稳定
缺点:
1.用到辅助空间,空间消耗更大
2.需要复制回原数组

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N=1e5+5;int a[N],T[N];void merge_sort(int *A,int x,int y){    if(y-x>1)    {        int m=(x+y)/2;        int l=x,i=x,r=m;        merge_sort(A,x,m);        merge_sort(A,m,y);        while(l<m||r<y)///两个序列至少有一个不为空        {            if(r>=y||l<m&&A[l]<=A[r])                T[i++]=A[l++];///复制左边的            else T[i++]=A[r++];///复制右边的        }        for(int i=x; i<y; i++)///复制回原数组            A[i]=T[i];    }}int main(){    int n;    while(~scanf("%d",&n))    {        for(int i=0; i<n; i++)            scanf("%d",&a[i]);        merge_sort(a,0,n);        for(int i=0; i<n; i++)            printf("%d ",a[i]);        printf("\n");    }    return 0;}
原创粉丝点击