笔记-归并排序

#include<yzrarray.h>//自定义的数组操作,方便使用
void mergearray(int a[],int first,int mid,int last,int temp[])
{   //划分成两个有序数组的合并
    int i=first,j=mid+1,m=mid,n=last,k=0;
    while(i<=m&&j<=n)
     if(a[i]<a[j])
        temp[k++]=a[i++];
     else
        temp[k++]=a[j++];
    while(i<=m)temp[k++]=a[i++];
    while(j<=n)temp[k++]=a[j++];
    for(i=0;i<k;i++)a[first+i]=temp[i];
}
void mergesort(int a[],int first,int last,int temp[])
{  
    if(first<last)
    {  int mid=(first+last)/2;
        mergesort(a,first,mid,temp);//左边有序
        mergesort(a,mid+1,last,temp);//右边有序
        mergearray(a,first,mid,last,temp);//合并
    }
}
int main()
{
    int a[10],c[20];
    ArrRand(a,10);
    Print(a,10);
    mergesort(a,0,10-1,c);
    Print(a,10);
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

原文地址:https://www.cnblogs.com/Thereisnospon/p/4768529.html