归并排序

#include<bits/stdc++.h>
using namespace std;

const int Max=10000;
int a[Max];

void merge(int* a,int l1,int r1,int l2,int r2) {
    int L1=l1,L2=l2,index=0,temp[Max]= {0};
    while(L1<=r1&&L2<=r2) {
        if(a[L1]>=a[L2]) {
            temp[index++]=a[L2++];
        } else if(a[L1]<a[L2]) {
            temp[index++]=a[L1++];
        
    }
    while(L1<=r1) {
        temp[index++]=a[L1++];
    }
    while(L2<=r2) {
        temp[index++]=a[L2++];
    }
    for(int i=0;i<index;i++){
        a[l1+i]=temp[i];
    }
}

void mergesort(int* a,int l,int r) {
    if(l<r) {
        int mid=(l+r)/2;
        mergesort(a,l,mid);
        mergesort(a,mid+1,r);
        merge(a,l,mid,mid+1,r);
    }
}

int main() {
    int n;
    while(cin>>n) {
        int left=0,right=n-1;
        for(int i=0; i<n; i++) {
            cin>>a[i];
        }
        mergesort(a,left,right);
        for(int i=0; i<n; i++) {
            cout<<a[i]<<" ";
        }
        cout<<endl;
    }
    return 0;
}
全部评论

相关推荐

06-07 12:20
新余学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务