c/c++语言开发共享使用c语言中的递归进行合并排序

#include #include int arr[20]; void main() { int n,i; clrscr(); printf("nttt------Merge Sorting------nn"); printf("Enter the size of arrayn"); 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("nnttt-----Merge Sorted Elements-----nn"); 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和中= 3,然后这个时间mid再次递归调用(arr,0,1)..依此类推,直到低和中等于0,然后如果条件失败,那么因为如果(0 <0)不成立

但我能理解merge_sort(arr,mid + 1,high); 正在被调用?但是这个程序运行正常。请解释编译器如何调用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 ,使lowhigh更接近。 最终if(low < high)将失败,则终止该递归段。

      以上就是c/c++开发分享使用c语言中的递归进行合并排序相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/550183.html

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐