控制不进入函数内部(合并排序)

control not going inside the function(merge sort)

当我调试它时,光标甚至没有进入 msort 函数内部,这有助于我解决代码中的问题

#include<stdio.h>
#include<conio.h>

void merge(int arr[],int low,int mid,int high){
    int i=0,j=mid+1,brr[high-low+1],k=0;
    while(i<=mid&&j<=high){
        if(arr[i]<=arr[j]) brr[k++]=arr[i++];
        else brr[k++]=arr[j++];
    }
    if(j<high) while(j<=high) brr[k++]=arr[j++];
    else while(i<=mid) brr[k++]=arr[i++];
    for(k=low;k<=high;k++){
        arr[k]=brr[k];
    }
}

void msort(int arr[],int low,int high){
    int mid=(low+high)/2;
    if(low<high){
        msort(arr,low,mid);
        msort(arr,mid+1,high);
        merge(arr,low,mid,high);
    }
}


void main(){
    int arr[]={23,54,-1,76,1,90,34,56};
    int len=8;
    printf("before sorting");
    for(int i=0;i<len;i++) printf("%d,",arr[i]);
    printf("\nafter sorting");
    msort(arr,0,len-1);
    for(int i=0;i<len;i++) printf("%d",arr[i]);
}

光标停在 msort() 函数处,程序正在终止

您很可能因超出数组边界而导致未定义行为而导致崩溃:

for (k = low; k <= high; k++)
{
    arr[k] = brr[k];
//               ^ (!)
}

klow 上升到 high 包括,brr 的有效索引是从 0 到 high - low,但你超过了由 low 个元素构成的数组(并在开头跳过那么多元素)。

for (k = low; k <= high; k++)
{
    arr[k] = brr[k - low];
//                 ^^^^^
}

问题已解决。