首页 > 试题广场 >

对于归并排序的合并步骤的传统的实现需要三个循环[98]:

[问答题]
对于归并排序的合并步骤的传统的实现需要三个循环[98]:
void merge(long src1[],long src2[],long dest[], long n) {
    long i1=0;
    long i2= 0;
    long id= 0;
    while (i1 <n&&i2<n){
        if (src1[i1] < src2[i2])
            dest [id++] = src1[i1++];
        else
            dest [id++] = src2[i2++];
    }
    while (i1 < n)
        dest[id++] = src1[i1++];
    while (i2< n)
        dest [id++] = src2[i2++] ;
}
对于把变量i1和i2与n做比较导致的分支,有很好的预测性能一唯一的预测错误发生在它们第一次变成错误时。另一方面,值src1[i1]和src2[i2]之间的比较(第6行),对于通常的数据来说,都是非常难以预测的。这个比较控制一个条件分支,运行在随机数据上时,得到的CPE大约为15. 0(这里元素的数量为2n)。
重写这段代码,使得可以用一个条件传送语句来实现第一个循环中条件语句(第6~9行)的功能。


这道题你会答吗?花几分钟告诉大家答案吧!