随手写写之归并排序

#include<iostream>
#include<cstdio>
using namespace std;
const int N=25;
int tmp[N];
int a[N];
void mergearray(int a[],int tmp[],int start,int mid,int last)
{
    int i=start,j=mid+1;
    int k=start;
    while(i<=mid&&j<=last)
    {
        if(a[i]>a[j])
            tmp[k++]=a[j++];
        else
            tmp[k++]=a[i++];
    }
    while(i<=mid)
    {
        tmp[k++]=a[i++];
    }
    while(j<=last)
    {
        tmp[k++]=a[j++];
    }
    for(int t=start;t<=last;t++)
    {
        a[t]=tmp[t];
    }
}
void mergesort(int a[],int tmp[],int start,int last)
{
    if(start<last)//不要用while
    {
        int mid=(start+last)/2;
        mergesort(a,tmp,start,mid);
        mergesort(a,tmp,mid+1,last);
        mergearray(a,tmp,start,mid,last);
    }
}
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    mergesort(a,tmp,0,n-1);
    for(int i=0;i<n;i++)
        cout<<a[i]<<" ";
}

猜你喜欢

转载自blog.csdn.net/salmonwilliam/article/details/81148370
今日推荐