在合并排序递归中打印错误的索引值

Printing wrong index values in mergesort recursion

#include<iostream>
using namespace std;

void merge(int* arr, int l, int mid, int r)
{
    int n1=mid-l+1;
    int n2=r-mid;
    int L[n1],R[n2];
    for(int i=0; i<n1; i++)
        L[i]=arr[l+i];
    for(int i=0; i<n2; i++)
        R[i]=arr[mid+1+i];
    int i=0,j=0,k=l;
    while(i<n1 && j<n2){
        if(L[i]<=R[j])
            arr[k++]=L[i++];
        else
            arr[k++]=R[j++];
    }
    while(i<n1)
        arr[k++]=L[i++];
    while(j<n2)
        arr[k++]=R[j++];
}

void mergesort(int* arr, int l, int r)
{
    if(l<r){
        int mid=(l+r)/2;
        printf("MS(%d, %d)\n", l,r);
        mergesort(arr, l, mid);
        printf("MS(%d, %d)\n", l,r);
        mergesort(arr, mid+1, r);
        printf("MS(%d, %d)\n", l,r);
        merge(arr, l, mid, r);
        printf("Afte Merge:    MS(%d, %d)\n", l,r);
    }
}

int main()
{
    int arr[] = {5, 2, 1, 6, 7, 9, 4};
    mergesort(arr, 0, 6);
    for(auto x:arr)
        cout<<x<<' ';

    return 0;

}

我正在打印 l 和 r 的值,以在每次递归调用时检查它们的值。但它不是很正确。第一次合并后的一个例子是:-

OUTPUT:
MS(0, 6)
MS(0, 3)
MS(0, 1)
MS(0, 1)
MS(0, 1)
Afte Merge:    MS(0, 1)

此处第 4 行和第 5 行(从 1 开始为 MS(0, 6))应分别打印 MS(0,0) 和 MS(1,1)。请告诉我我做错了什么我想要正确的输出。
此致,

因为 l == r 所以无法打印 MS(0,0)。

如果你使用 if(l <= r) 就会死循环

所以,您的代码是准确的。

if(l<r){
        int mid= l + (r-l)/2;
        printf("MS(%d, %d)\n", l,r);
        mergesort(arr, l, mid);
        printf("MS(%d, %d)\n", l,r);
        mergesort(arr, mid+1, r);
        printf("MS(%d, %d)\n", l,r);
        merge(arr, l, mid, r);
        printf("Afte Merge:    MS(%d, %d)\n", l,r);
    }