l + r >> 1; 的含义

void merge_sort(int q[],int l,int r){
    
    //递归的终止情况
    if(l>=r)return;
    
    //第一步:分成子问题
    int mid = l+r>>1;
    
    //第二步:递归处理子问题
    merge_sort(q, l, mid),  merge_sort(q, mid+1, r);
 
    //第三步:合并子问题
    int k = 0, i = l, j = mid+1;
    while( i<=mid && j<=r )
        if(q[i] <= q[j])  tmp[k++] = q[i++];
        else  tmp[k++] = q[j++];
    while(i <= mid) tmp[k++] = q[i++];
    while(j <= r) tmp[k++] = q[j++];
    
    for( i=l,j=0; i<=r;  i++,j++ ) q[i]=tmp[j];
}
 

上述归并排序模板代码中int mid =  l + r  >> 1;  的含义:

int mid = (l + r) >> 1;  是指l+r的值右移一位,
也就相当于l+r的值除以2取整,即(l+r)/2。

>>是移位运算符
x>>1相当于x除以2
x>>N相当于x除以(2的N次方)


 

你可能感兴趣的:(c++)