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次方)