请大佬帮忙看一下这归并排序哪里写错了
  • 板块题目总版
  • 楼主mmbbyy
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/1/28 19:47
  • 上次更新2024/1/28 21:40:15
查看原帖
请大佬帮忙看一下这归并排序哪里写错了
764553
mmbbyy楼主2024/1/28 19:47
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,a[N];

void merge_sort(int l,int r){
    if(r-l+1<=1)return;
    int mid=((r-l)>>1)+l;
    //if(mid-l+1>1)
    merge_sort(l,mid);
    //if(r-(mid+1)+1>1)
    merge_sort(mid+1,r);

    int i=l,j=mid+1;int b[r-l+1+5],tmp=0;
    while(i<=mid&&j<=r){
        if(a[i]<=a[j]){
            b[++tmp]=a[i];
            i++;
        }
        else{
            b[++tmp]=a[j];
            j++;
        }
    }
    if(i>mid)for(;j<=r;j++)b[++tmp]=a[j];
    else if(j>r)for(;i<=mid;i++)b[++tmp]=a[i];
    for(int k=l;k<=r;k++)a[k]=b[k];
}



int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    merge_sort(1,n);
    for(int i=1;i<=n;i++)printf("%d ",a[i]);
    return 0;
}
2024/1/28 19:47
加载中...