算法分析实验之合并排序

题目描述

这是一个很简单的排序题目. 为了锻炼大家对不同算法的了解,请大家用归并排序法对此题进行解答. 对一组整数数列A[1],A[2],A[3]......A[N]进行排序,按照从小到大的顺序输出.

输入

本题只有一组测试数据,在输入的第一行输入N(表示整数数列的大小)(N < 1000)
接下来N行输入N个整数,每一行一个整数.

输出

对已经排好序的数从小到大依次输出,每两个数之间用两个空格隔开,且每输出10个数换行.

样例输入复制

12
45
545
48
47
44
45
4857
58
57
485
1255
42

样例输出复制

42 44 45 45 47 48 57 58 485 545
1255 4857

#include<iostream>
#include<vector> 
using namespace std;
int n;
void  Merge(int a[],int temp[],int start,int mid,int end)
{
    
    int i=start,j=mid+1,k=start;
    while(i!=mid+1&&j!=end+1){
        if(a[i]<=a[j])
            temp[k++]=a[i++];
        else
            temp[k++]=a[j++];

    }
    
    while(i!=mid+1)
        temp[k++]=a[i++];

    while(j!=end+1)
        temp[k++]=a[j++];

        
    for(i=start; i<=end; i++)
        a[i] = temp[i];

}
void Mergesort(int a[],int temp[],int start,int end)
{
    int mid;
    if(start<end)
    {
        mid=start+(end-start)/2;
        Mergesort(a,temp,start,mid);
        Mergesort(a,temp,mid+1,end);
        Merge(a,temp,start,mid,end);
    }
}

int main(){
    cin>>n;
    int a[n];
    for(int i=0;i<n;i++)
    cin>>a[i];
    
    int b[n];
    Mergesort(a,b,0,n-1);
    
    for(int i=0;i<n;i++){
        if((i+1)%10==0) cout<<a[i]<<endl;
        else{
            if(i==n-1) cout<<a[i]<<endl;
            else cout<<a[i]<<"  ";
        }
    }
    return 0;
}

 

posted @ 2020-05-31 16:53  Admin-2000  阅读(301)  评论(0编辑  收藏  举报