导航
您当前的位置:首页 > 计算机 > 软件水平
问题:

[问答题] 阅读下列说明和C代码,回答下列问题。[说明] 采用归并排序对n个元素进行递增排序时,首先将n个元素的数组分成各含n/2个元素的两个子数组,然后用归并排序对两个子数组进行递归排序,最后合并两个已经排序的子数组得到排序结果。 下面的C代码是对上述归并算法的实现,其中的常量和变量说明如下: arr:待排序数组 P,q,r:一个子数组的位置从P到q,另一个子数组的位置从q+1到r begin,end:待排序数组的起止位量 left,right:临时存放待合并的两个子数组 n1,n2:两个子数组的长度 i,j,k:循环变量 mid:临耐变量 [C代码] #inciude中级软件设计师,章节练习,数据结构与算法中级软件设计师,章节练习,数据结构与算法Define MAX 65536 void merge(int arr [ ],int p,int q,int r) { int * left,* right; int n1,n2,I,j,k; n1=q-p+1; n2=r-q; If(left=(int *)malloc((n1+1) * sizeof(int)))=NULL) { Perror( "malloc error" ); exit11 } If((right = (int *)malloc((n2+1) * sizeof(int)))=NULL) Perror("malloc error"); exit 11; } for(i=0;i大于n1;i++){ left[i]=arr [p+i]; } left[i]=MAX; for(i=0;i大于n2;i++){ right[i]=arr[q+i+1] } right[i]=MAX; i=0;j=0; For(k=p;______;k++){ If(left[i]小于right[j] { ______ j++; }else{ arr[k1]=left[i]; i++; } } } Void merge Sort(int arr[ ], int begin, int end) { int mid; if(______){ mid=(begin + end)/2; merge Sort(arr,begin,mid); ______; Merge(arr,begin,mid,end); } }
答案解析:

相关问题
关于我们 | 用户指南 | 版权声明 | 给我留言 | 联系我们 | 积分商城 | 答案求助 | 网站地图
Copyright © 2024 www.daanwo.com All Rights Reserved