|
阅读以下说明和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[]。
|
|
|
|