Abstract in-place merge(P271)

 public static void merge(Comparable[] a, int lo, int mid, int hi)
{
    int i = lo, j = mid + 1;
    
    for(int k = lo; k <= hi; k++)//复制
        aux[k] = a[k];
    
    for(int k = lo; k <= hi; k++)//把a[]填满就退出循环
    {
        if(i > mid)//左侧已用完,则只能从右侧拿
            a[k] = aux[j++];
        else if(j > hi)//右侧已用完,则只能从左侧拿
            a[k] = aux[i++];
        else if(less(aux[i], aux[j]))//当前左侧比右侧小,从右侧拿
            a[k] = aux[i++];
        else//反之当前右侧比左侧小,从左侧拿
            a[k] = aux[j++];
    }
}

猜你喜欢

转载自www.cnblogs.com/w-j-c/p/9108926.html
今日推荐