fusionner le sorting en utilisant la récursion dans c langue

#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++]; } } 

si dans ce programme, je prends en entrée un tableau de taille 7.so de main () merge_sort (arr, 0,6) est passé à la fonction respective après vérification de cette condition si (0 <6), puis le milieu devient 3, puis il y a un appel récursif avec low = 0 et mid = 3, puis cette fois mid est égal à 1 et encore un appel récursif avec (arr, 0,1) ..et ainsi de suite jusqu'à ce que low et mid soient égaux à 0; si (0 <0) n'est pas vrai

mais et je suis capable de comprendre comment merge_sort (arr, mid + 1, high); est appelé? mais ce programme fonctionne bien. Veuillez expliquer comment le compilateur appelle merge_sort (arr, mid + 1, high)

Sur la base des commentaires, la vraie question est la suivante: étant donné ce morceau de code récursif:

 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); } } 

Comment peut-on atteindre la ligne indiquée, puisque la ligne qui précède revient dans la même fonction?

Dans le bloc conditionnel, la valeur de mid est d'abord définie sur une valeur comprise entre les points bas et haut. Ce mid devient alors le high de la prochaine itération, rapprochant le low et le high . Finalement, if(low < high) échouera, mettant fin à cette étape de la récursivité.