免费智能真题库 > 历年试卷 > 程序员 > 2021年上半年 程序员 下午试卷 案例
  第3题      

 
阅读以下说明和C代码, 填补C代码中的空缺, 将解答写在答题纸的对应栏内。
 
问题:3.1         实现二路归并排序的一种方法是先递归地划分出于序列(当子序列仅包含0个或1个元素时得到初始的有序子序列),然后两两合并Hi得到更长的有序子序列,最后完成排序处理。
      函数mergesort(inta[],,intn)对数组a的前n个元素进行排序。
      函数mergesort(inta [],i nt left,i nt right, int tp[])对序列进行划分,对以(left+right)/2为界的两个子序列排序后, 调用merge()对两个有序子序列进行合并。
     函数merge (inta[].,int left,intmint right, int *tp)对数组下标范围[lefi:,m -1]和[m,right-1 ]所表示的两个有序子序列进行合并。
将非递减有序子序列a[left]~a[m-1]和a[m]~a[right-1]合并为一个非递减有序序列的过程是:分别用i、j表示两个有序于序列的元素下标,比较a[i]和a[j],若a[i]较小,则输出a[i]且 i递增, 否则输出a[j]且j递增, 再次比较a[i]和a[j]并重复以上过程, 直到其中任一子序列到达结尾, 然后输出另一序列的剩余元素。合并过程中所输出的元素暂存在空间足够大的辅助数组tp[]中,最后再复制到数组a[]。

 
 
 

   题号导航      2021年上半年 程序员 下午试卷 案例   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
 
第3题    在手机中做本题