сортировка слияния с использованием рекурсии в c languaage

#include #include int arr[20]; void main() { int n,i; clrscr(); printf("\n\t\t\t------Merge Sorting------\n\n"); printf("Enter the size of array\n"); scanf("%d",&n); printf("Enter the elements:\n"); for(i=0; i < n; i++) { scanf("%d",&arr[i]); } merge_sort(arr,0,n-1); printf("\n\n\t\t\t-----Merge Sorted Elements-----\n\n"); printf("Sorted array:\t"); for(i=0; i < n; i++) { printf("\t%d",arr[i]); } getch(); } int merge_sort(int arr[],int low,int high) { int mid; if(low < high) { mid=(low+high)/2; merge_sort(arr,low,mid); merge_sort(arr,mid+1,high); merge(arr,low,mid,high); } } int merge(int arr[],int l,int m,int h) { int arr1[10],arr2[10]; int n1,n2,i,j,k; n1=m-l+1; n2=hm; for(i=0; i < n1; i++) { arr1[i]=arr[l+i]; } for(j=0; j < n2; j++) { arr2[j]=arr[m+j+1]; } arr1[i]=9999; arr2[j]=9999; i=0; j=0; for(k=l; k <=h; k++) { if(arr1[i]<=arr2[j]) arr[k]=arr1[i++]; else arr[k]=arr2[j++]; } } 

если в этой программе я беру ввод, массив размером 7.so из main () merge_sort (arr, 0,6) передается соответствующей функции после того, как это условие проверяется, если (0 <6), то там средняя становится 3, то есть рекурсивный вызов с низким = 0 и mid = 3, тогда на этот раз средняя 1 снова рекурсивный вызов с (arr, 0,1) .. и так далее, пока низкий и средний не равны 0, тогда там, если условие терпит неудачу, потому что если (0 <0) не верно

но я могу понять, как merge_sort (arr, mid + 1, high); вызывается?, но эта программа отлично работает .please объясняет, как компилятор вызывает merge_sort (arr, mid + 1, high)

Основываясь на комментариях, реальный вопрос: данный бит рекурсивного кода:

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

Как можно достичь указанной линии, так как линия перед ней повторяет одну и ту же функцию?

В условном блоке значение mid сначала устанавливается на значение между нижней и верхней точками. Затем эта mid становится high для следующей итерации, приближая сближение и сближение. В конце концов, if(low < high) не удастся, завершение этого этапа рекурсии.